Abordaremos o recurso de Low-Level Discovery do
Zabbix.
Um recurso muito importante e interessante para qualquer ambiente de monitoramento. Com ele, podemos automatizar o
cadastro de novos itens, triggers e gráficos de maneira automática.
No Zabbix 2.2.3, temos suporte a 3 tipos de suportes ao Low-Level Discovery;
- Discovery de sistema de arquivos;
- Discovery de interfaces de rede;
- Discovery de SNMP OID.
E agora, não existe o suporte ao Discovery que você precisa? Crie seu próprio Discovery usando
userparameter!
Imagine o seguinte cenário: você quer monitorar todos os arquivos de log do diretório
/var/log/
do servidor de aplicação.
Teoricamente, teríamos que cadastrar cada arquivo como um ITEM no front-end do Zabbix, exemplo:
logrt[/var/log/syslog,,,300]
Para não ter que cadastrar item a item, iremos criar um Discovery desses itens e cadastrar automaticamente no front-end.
Usaremos um Shell Script gerando uma saída no formato
JSON reconhecido pelo Zabbix e iremos
configurar o script como
userparameter no arquivo de configuração do agente do Zabbix.
O formato JSON é como se fosse um XML para uma resposta, no nosso caso, irá gerar um array com a localização dos arquivos
de logs e o Zabbix tem a inteligência de interpretar esse JSON e cadastrar os itens no host, de acordo com o protótipo de item.
Passos
1. Criar um Shell Script:
Script no GitHub:
https://github.com/rafaelmendonca/Zabbix
# vi /etc/zabbix/discovery_files_logs.sh
#!/bin/sh
# Rafael Mendonca
# Qui Mai 29 17:24:32 BRT 2014
#
# Script para gerar saída no formato JSON
#
# Variables
#
FIND=$(which find)
DIRLOG="/var/log/"
# Begin
for log in $(${FIND} ${DIRLOG} -type f | egrep -v "*.gz.*|*.[0,1].*" | xargs file | grep -v data$ | awk -F\: '{print $1}'); do
# Aramzena o valor no ARRAY.
logfile="$logfile,"'{"{#LOGFILE}":"'$log'"}'
done
echo '{"data":['${logfile#,}' ]}'
1.1: Adicione a permissão de execução e altere o dono e grupo do arquivo:
# chmod 750 /etc/zabbix/discovery_files_logs.sh
# chown zabbix:zabbix /etc/zabbix/discovery_files_logs.sh
1.2: Executando o script:
Dica.: para validar o JSON gerado pelo script, instale o utilitário do Python para fazer o parse do JSON:
# apt-get install python-simplejson
Executando o script e gerando o JSON:
Obs.: caso a saída seja semelhante ao resultado abaixo, ocorreu tudo certo:
# /etc/zabbix/discovery_files_logs.sh | python -mjson.tool
{
"data": [
{
"{#LOGFILE}": "/var/log/zabbix/zabbix_proxy.log"
},
{
"{#LOGFILE}": "/var/log/zabbix/zabbix_agentd.log"
},
{
"{#LOGFILE}": "/var/log/syslog"
},
{
"{#LOGFILE}": "/var/log/daemon.log"
},
{
"{#LOGFILE}": "/var/log/news/news.notice"
},
{
"{#LOGFILE}": "/var/log/news/news.err"
},
{
"{#LOGFILE}": "/var/log/news/news.crit"
},
{
"{#LOGFILE}": "/var/log/fsck/checkroot"
},
{
"{#LOGFILE}": "/var/log/fsck/checkfs"
},
{
"{#LOGFILE}": "/var/log/installer/syslog"
},
{
"{#LOGFILE}": "/var/log/installer/status"
},
{
"{#LOGFILE}": "/var/log/installer/partman"
},
{
"{#LOGFILE}": "/var/log/installer/hardware-summary"
},
{
"{#LOGFILE}": "/var/log/installer/cdebconf/questions.dat"
},
{
"{#LOGFILE}": "/var/log/installer/cdebconf/templates.dat"
},
{
"{#LOGFILE}": "/var/log/installer/lsb-release"
},
{
"{#LOGFILE}": "/var/log/mail.warn"
},
{
"{#LOGFILE}": "/var/log/dmesg"
},
{
"{#LOGFILE}": "/var/log/apt/history.log"
},
{
"{#LOGFILE}": "/var/log/apt/term.log"
},
{
"{#LOGFILE}": "/var/log/auth.log"
},
{
"{#LOGFILE}": "/var/log/mail.log"
},
{
"{#LOGFILE}": "/var/log/user.log"
},
{
"{#LOGFILE}": "/var/log/mail.info"
},
{
"{#LOGFILE}": "/var/log/lpr.log"
},
{
"{#LOGFILE}": "/var/log/dpkg.log"
},
{
"{#LOGFILE}": "/var/log/kern.log"
},
{
"{#LOGFILE}": "/var/log/aptitude"
},
{
"{#LOGFILE}": "/var/log/messages"
},
{
"{#LOGFILE}": "/var/log/mail.err"
},
{
"{#LOGFILE}": "/var/log/debug"
},
{
"{#LOGFILE}": "/var/log/alternatives.log"
}
]
}
2. Configurar o
userparameter no agente do Zabbix.
Dica:
userparameter é um recurso do Zabbix que permite executar scripts do lado do agente
para coletar valores específicos.
# vi /etc/zabbix/zabbix_agentd.conf
Acrescente a seguinte linha:
userparameter=discovery.logfile,/etc/zabbix/discovery_files_logs.sh
2.1: Após a configuração, faça um restart no agente do Zabbix:
# /etc/init.d/zabbix-agentd restart
3. Feito isso, acesse o front-end do Zabbix e crie o Discovery.
4. Agora, crie o protótipo de item.
Conclusão
É isso aí, pessoal!
Mais um tutorial trivial para quem trabalha com monitoramento
* Lembrando que usei como exemplo, o monitoramento de arquivos de log. Ficou um pouco incompleto, pois não montei a
trigger, que não era o foco desta dica.
Maiores detalhes em:
http://rafaelmendonca.tk
Fiquem à vontade para entrar em contato.
Até a próxima! ;)
Rafael Mendonça
Consultoria, Projetos & Treinamentos
rafaelmendonca3f[at]gmail.com
http://rafaelmendonca.tk
LPI 3 e PCP-201