Como criar Discovery com Zabbix

Publicado por Rafael Mendonça em 02/06/2014

[ Hits: 13.125 ]

Blog: http://rafaelmendonca.tk

 


Como criar Discovery com Zabbix



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

Outras dicas deste autor

Como conquistar a LPI 1

Configurando Wireless no GNU/Linux

Leitura recomendada

Splash do Grub: Como desabilitar a logotipo que aparece durante o boot do Ubuntu

Agendamento de tarefas

Novo driver para placa wireless BCM4312

Como rodar um Shell Script como se fosse um comando

Habilitando a compilação JIT (Just In Time) para o PHP8 no Ubuntu

  

Comentários
[1] Comentário enviado por millinux em 02/06/2014 - 14:24h

Muito bom

[2] Comentário enviado por elvispompeu em 04/07/2014 - 08:49h

Esse é meu garoto HUSKOSEHU =D

[3] Comentário enviado por diegotesch em 15/03/2016 - 16:04h

legal o tutorial, mas o discovery no zabbix que voce se propos a mostrar não encontra-se no tutorial.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts