Como adicionar um evento / alerta no Zenoss para um tipo de string SNMP OID?

4

Eu tenho o status de um aplicativo específico sendo relatado como string sobre SNMP.

Quando tudo está funcionando como esperado, o monitoramento relata uma string vazia e quando algumas das origens de dados têm problemas, ele reporta uma string com os nomes das fontes de dados afetadas.

Eu quero mostrar essa string como um alerta / info no console de eventos do Zenoss sempre que não estiver vazio.

O problema é que sempre que eu adiciono uma fonte de dados do tipo SNMP a um modelo de monitoramento, ele assume um valor numérico.

A ideia era usar um StatusThreshold apenas para ver quando o valor é alterado.

Essa configuração resulta em nenhum evento que apareça no console de eventos.

Do meu ponto de vista, os limites são avaliados em relação ao valor no banco de dados RRD, que é apenas numérico, então a string fica consistentemente transformada em 'NaN'.

A interface de modelos de monitoramento do Zenoss não mostra uma maneira intuitiva de lidar com strings. Como isso pode ser feito?

    
por Carlos Lima 09.04.2013 / 19:12

1 resposta

3

Uma solução possível acaba sendo muito simples, mas pesquisar na Internet produz muitas perguntas semelhantes que não são respondidas ou acabaram adotando uma abordagem diferente ou sendo um problema diferente para começar.

O Zenoss oferece a capacidade de integração com plug-ins do Nagios, o que pode não chamar sua atenção se você não souber como essa integração funciona.

Basicamente, isso significa que você pode chamar um comando arbitrário contanto que ele retorne o código de saída 0 para sucesso (clear event) e 1, 2 ou 3 para erro (generate event), bem como uma string formatada corretamente em STDOUT.

Com essas informações, você pode escrever um script simples que leia seus dados SNMP usando snmpget , analise e imprima a mensagem que deseja exibir no evento.

Um exemplo simples e genérico do Perl poderia ser:

#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;

my ( $target, $oid, $msg ) = @ARGV;

my $value = 'snmpget -v1 -c <comunity> $target $oid';
$value =~ /STRING: "([^"]*)"/;

exit 0 unless $1;

say "$msg $1";
exit 1;

salve isso como $ZENHOME/libexec/string_monitor no seu servidor zenoss e chmod +x $ZENHOME/libexec/string_monitor

Em seguida, em Modelos de monitoramento, adicione uma fonte de dados do tipo COMMAND e preencha o campo Modelo de comando assim:

string_monitor ${here/manageIp} <OID> "Error reported on:"

Algumas coisas para lembrar se você não estiver familiarizado com o Zenoss:

Se você tiver uma configuração com um servidor zenoss e muitos coletores, ele será chamado a partir do coletor ao qual seu dispositivo está atribuído, e não de seu servidor principal; portanto, lembre-se de ter o script disponível em todos os coletores. Quando ele tenta chamar string_monitor no coletor e não está lá, você terminará com um evento no Event Console que diz "Código: 2 - Msg: Uso indevido de shell embutidos"

Isso é muito enganador, pois é fácil sugerir que há um problema com seu script quando o erro foi que $ZENHOME/libexec/string_monitor não foi encontrado. : -)

Isso pode ser particularmente confuso se você usar o botão "Testar" ao configurar a Fonte de Dados, caso em que a solicitação será feita a partir do servidor principal e ele aparecerá funcionando e exibirá o erro acima no console em vez disso.

Além disso, para tornar seu processo mais rápido, você pode querer ssh no coletor, sudo -i -uzenoss e executar zencommand run -d your.targetdevice.com -v 10

Isso deve gerar uma execução completa nesse dispositivo e seu evento deve aparecer no console de eventos (supondo que não esteja vazio).

Depois de funcionar, também é possível passar dados numéricos reais do seu script para o Zenoss, o formato da linha impressa é:

Error string to display|failing=7 warning=31 good=24

falhar, bom e aviso serão passados como pontos de dados nessa fonte de dados e você pode usar Limites MinMax ou gráficos de plotagem neles.

Para começar, recomendo começar a trabalhar com um script mínimo / fictício e expandir a partir daí:

#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
say "We got an error|my=1 sample=6 values=10";
exit 1;
    
por 09.04.2013 / 19:12