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;