O documento discute o uso de scripts externos no Zabbix para expandir suas funcionalidades de monitoramento e notificação. Os scripts podem ser usados para criar itens de coleta de dados, regras de descoberta e integrar o Zabbix com serviços de notificação como Telegram. Um exemplo mostra como um script pode coletar endereços BFD de equipamentos de rede via SNMP.
2. Igor Nicoli dos Santos
2
Especialista em automação, Tecnólogo
em redes, Zabbix Specialist e
Professional, entusiasta OpenSource e
aficionado por tecnologia
3. External Scripts
Essa é uma das formas existentes de
se estender as funcionalidades do
zabbix.
3
O “External check” é uma verificação executada pelo servidor
Zabbix executando um “shell script“ ou um binário. No
entanto, quando os hosts são monitorados por um Zabbix
proxy, os “External check” são executadas pelo proxy.
“External check” não requer nenhum agente instalado no host
que está sendo monitorado.*
* Parte da documentação do zabbix
4. 4
Pontos de atenção:
❖ Diretorio pré-definido (parâmetro “ExternalScripts”);
❖ Usuário utilizado pelo Zabbix Server/Proxy;
❖ Permissões e variáveis de ambiente limitadas;
❖ Opções de binários e scripts a serem executados são restritos.
A sintaxe do item “External check” funciona assim:
nome_do_script[ <parâmetro1>, <parâmetro2>, ... ]
6. 6
Caso de
Uso
Necessidade:
Monitorar sessões BFD em equipamentos de
rede.
Problema:
Algumas versões de equipamentos, quando uma
sessão fica indisponível a mesma não é mais
visível na MIB.
Sintoma do problema:
Não é possível consultar o status de “down” e o
item fica com o status de não suportado.
Solução:
Utilizar External Script em conjunto com o
Zabbix Sender para executar essa monitoração.
7. 7
ITEM
É possível criar itens de
coleta de dados usando
o tipo de item “External
Check”, assim fazendo
uso de um script
externo.
8. [zabbix@MANAGER] /opt/zabbix/share/zabbix/alertscripts
$ cat bfd.collector
#!/bin/env perl
...
MAIN:
{
...
# Comando para coleta de dados via SNMP:
my $CMD2Exec = "timeout $SNMP_TOUT $APP_SNMPWALK -v2c -Cc -c
$SNMP_COMMUNITY $TARGET_HOST ".$SNMP_OID{ bfdSessAddr }."
2>/dev/null;[ $? -eq 124 ] && echo cmd_timeout";
...
# Print dos valores formatados no padrao JSON esperado pelo Zabbix:
print "{"data":[";
for( my $Index = 0; scalar( @BFDDecAddr ) > $Index; $Index++ ){
if(( scalar( @BFDDecAddr ) - 1 ) == $Index ){
print "{"{#SESSADDR}":"".$BFDDecAddr[ $Index
].""}";
} else {
print "{"{#SESSADDR}":"".$BFDDecAddr[ $Index
].""},";
}
}
print "]}n";
...
# Envia as métricas coletadas utilizando o zabbix sender:
sub SendEvent {
my $CMD2Exec = "$ZBXSender --zabbix-server $SERVER --with-
timestamps --input-file $CacheFile";
}
Script:
bfd.collector
Em um script você pode
utilizar diversos comandos,
técnicas e abordagem para
resolver problemas ou criar
novas soluções.
8
9. 9
DISCOVERY RULE
Quando você precisa
montar uma regra de
descoberta para algo que
o zabbix não suporta
nativamente, o que você
faz?
Utiliza um script !
10. [zabbix@MANAGER] /opt/zabbix/share/zabbix/alertscripts
$ ./bfd.collector discovery RO01 127.0.0.1 publicEnemyNumber1
{
"Data":[
{
"{#SESSADDR}":"192.168.1.1"
},
{
"{#SESSADDR}":"172.16.0.1"
},
{
"{#SESSADDR}":"10.0.1.2"
},
{
"{#SESSADDR}":"8.8.8.8"
},
{
"{#SESSADDR}":"8.8.4.4"
},
{
"{#SESSADDR}":"192.168.15.1"
},
{
"{#SESSADDR}":"172.16.72.45"
},
{
"{#SESSADDR}":"127.0.0.1"
},
{
"{#SESSADDR}":"200.185.16.35"
},
{
"{#SESSADDR}":"169.57.173.100"
}
]
}
Um script configurado como
“External check” pode ser
usado para alimentar uma
rotina de descoberta.
10
Script:
bfd.collector
11. 11
MEDIA TYPES
Para as mídias, temos
algo similar ao “External
Script”, porem chamado
aqui de “Alert Script”
mas tem o mesmo
funcionamento.
12. [zabbix@MANAGER] /opt/zabbix/share/zabbix/alertscripts
$ cat telegram-notification
#!/bin/ksh
ENTER="
";
USERID="$1";
ARQUIVO="botinfo.txt";
if [ -f "$ARQUIVO" ]; then
KEY=$(cat $ARQUIVO);
else
KEY="999999999:AaF68AgpRbgxCklh84FBb0zvQmBtgYYD78Q";
fi
TIMEOUT="5";
TEXT=$(echo -e "*$2* $ENTER$3" | sed 's/^SendNotification //g');
URL="https://api.telegram.org/bot$KEY/sendMessage"
RESPONSE=`curl -s --max-time $TIMEOUT -d
"chat_id=$USERID&disable_web_page_preview=1&parse_mode=markdown
&text=$TEXT" $URL`;
Fonte de referencia do script:
http://spinola.net.br/blog/2017/01/22/integracao-com-telegram-
de-forma-facil-e-rapida
Script:
telegram-notification
Com esse script o Zabbix
adquire a capacidade de
notificar os usuários e
administradores através do
telegram.
12