External scripts
O poder do
em suas mãos
Igor Nicoli dos Santos
2
Especialista em automação, Tecnólogo
em redes, Zabbix Specialist e
Professional, entusiasta OpenSource e
aficionado por tecnologia
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
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>, ... ]
1. Onde podemos usar?
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
ITEM
É possível criar itens de
coleta de dados usando
o tipo de item “External
Check”, assim fazendo
uso de um script
externo.
[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
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 !
[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
MEDIA TYPES
Para as mídias, temos
algo similar ao “External
Script”, porem chamado
aqui de “Alert Script”
mas tem o mesmo
funcionamento.
[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
TELEGRAM:
Notificação
Utilizando métodos de
notificação com este,
você tem os eventos
mais importantes na
palma da sua mão.
Place your screenshot here 13
Dúvidas
&
Perguntas?
14
?
OBRIGADO 15
@igor_nicoli
Igor Nicoli dos Santos
igor.nicoli@gmail.com

Igor Nicoli: External scripts O poder do Zabbix em suas mãos

  • 1.
    External scripts O poderdo em suas mãos
  • 2.
    Igor Nicoli dosSantos 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>, ... ]
  • 5.
  • 6.
    6 Caso de Uso Necessidade: Monitorar sessõesBFD 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 criaritens 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 $ catbfd.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.collectordiscovery 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 asmí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 $ cattelegram-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
  • 13.
    TELEGRAM: Notificação Utilizando métodos de notificaçãocom este, você tem os eventos mais importantes na palma da sua mão. Place your screenshot here 13
  • 14.
  • 15.
    OBRIGADO 15 @igor_nicoli Igor Nicolidos Santos igor.nicoli@gmail.com