Pandora FMS: Definição de variáveis

O Pandora FMS é uma excelente ferramenta de monitoração, abrangendo infraestrutura e serviços. Outro dia, desenvolvendo a monitoração para uma base de dados Oracle, esbarrei em uma dificuldade:

Como especificar o SID de cada banco, dado que o agente de monitoração não permite a definição de variáveis?

O intuito seria um módulo de monitoração genérico o bastante para ser aplicado a qualquer Oracle, mas sem a possibilidade de definir variáveis ou obtê-las do ambiente fica complicado. Felizmente o core do Pandora é Open Source. Adicionei 2 linhas ao código do agente Pandora para plataformas Linux (perl), fazendo-o reconhecer a definição de variáveis através do .conf. No arquivo pandora_agent, na função read_config, adicionei as seguintes linhas:

} elsif ($line =~ /^\s*env_var\s+(\w+)\s*=\s*(.+)$/) {
  $ENV{$1} = $2;

Ficando, portanto, assim:

} elsif ($line =~ /^\s*file_collection\s+(.+)$/) {
  my $collection = $1;

  # Prevent path traversal attacks
  if ($collection !~ m/(\.\.)|\//) {
    $Collections{$collection} = 0;
  }
 
# Environment Variable BEGIN
} elsif ($line =~ /^\s*env_var\s+(\w+)\s*=\s*(.+)$/) {
  $ENV{$1} = $2;
# Environment Variable END

# Configuration token
} elsif ($line =~ /^\s*(\S+)\s+(.*)$/) {
  log_message ('setup', "$1 is $2");
  $Conf{$1} = $2;
  # Remove trailing spaces
  $Conf{$1} =~ s/\s*$//;
}

Desta forma é possível definir variáveis com a seguinte sintaxe no .conf:

env_var minhavar1 = “lalala”
env_var variavel2 = “lelele”

E voilà! Agora é possível acessar, a partir de qualquer monitor desenvolvido, quaisquer variáveis definidas no .conf.

23 Mar 2011