- Publicado em
Configurando SNMP Traps no Zabbix 7
- Autores
- Nome
- Felipe Padilha
Índice
Introdução
O monitoramento de redes é essencial para garantir a disponibilidade, o desempenho e a segurança de nossos ambientes de TI. Nesse contexto, o protocolo SNMP (Simple Network Management Protocol) desempenha um papel crucial ao permitir a coleta de informações e o envio de notificações sobre eventos relevantes nos equipamentos de rede.
As SNMP Traps são mensagens enviadas pelos dispositivos para alertar o sistema de monitoramento sobre eventos inesperados, falhas ou mudanças de estado. Essa abordagem baseada em eventos é extremamente vantajosa, pois elimina a necessidade de polling (coleta) constante, reduzindo o tráfego de rede e permitindo uma resposta mais rápida a incidentes.
Neste artigo, exploraremos como configurar o Zabbix para receber e processar SNMP Traps, possibilitando uma solução de monitoramento completa e proativa para sua rede.
Link para o tutorial em vídeo
Instalação e Configuração do Serviço de SNMPTrap
Vamos começar pelo básico, atualizar a lista de repositórios e então baixar as dependências que vamos usar:
sudo apt update
sudo apt install snmp snmpd snmptrapd libsnmp-perl snmp-mibs-downloader
Agora vamos baixar o script (escrito em Perl) para tratamento das Traps SNMP fornecido diretamente pela Zabbix:
sudo curl -o /usr/bin/zabbix_trap_receiver.pl https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/misc/snmptrap/zabbix_trap_receiver.pl
sudo chmod +x /usr/bin/zabbix_trap_receiver.pl
Vamos editar o script para apontar que ele deverá escrever as traps no arquivo /var/log/snmptrap/snmptrap.log
:
sudo sed -i "s|\$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';|\$SNMPTrapperFile = '/var/log/snmptrap/snmptrap.log';|" /usr/bin/zabbix_trap_receiver.pl
E criamos o arquivo e ajustamos a permissão antes de iniciar o serviço de snmptrap para evitar quaisquer erros:
sudo mkdir /var/log/snmptrap
sudo touch /var/log/snmptrap/snmptrap.log
sudo chmod 755 -R /var/log/snmptrap
Vamos ajustar a community SNMP no nosso arquivo de snmptrap.conf
, altere public para o padrão de community que utiliza na sua rede:
sudo tee /etc/snmp/snmptrap.conf > /dev/null <<EOF
authCommunity execute public
perl do "/usr/bin/zabbix_trap_receiver.pl";
EOF
Criamos um arquivo de logrotate para evitar que o log cresça indefinidamente:
sudo tee /etc/logrotate.d/snmptrap > /dev/null <<EOF
/var/log/snmptrap/snmptrap.log {
weekly
rotate 12
compress
delaycompress
missingok
notifempty
}
EOF
Vamos ajustar o arquivo de serviço do snmptrapd
para usar o usuário root e ajustar para o SNMP carregar as MIBs na inicialização:
sudo sed -i 's/User=Debian-snmp/User=root/' /usr/lib/systemd/system/snmptrapd.service
sudo sed -i 's/mibs.*/# mibs/' /etc/snmp/snmp.conf
Vamos recarregar a lista de serviços e iniciar o snmptrapd
:
sudo systemctl daemon-reload
sudo systemctl restart snmptrapd
sudo systemctl enable snmptrapd
sudo systemctl disable snmpd --now
Configuração no Zabbix
Editamos o arquivo de configuração do servidor Zabbix para ele iniciar os processos de SNMPTrap e reiniciamos o servidor para ele atualizar com a mudança:
sudo sed -i 's/^# StartSNMPTrapper=.*/StartSNMPTrapper=1/' /etc/zabbix/zabbix_server.conf
sudo systemctl restart zabbix-server
Criamos um item de fallback no template de SNMP (pode ser um à sua escolha ou pode criar um novo template). Normalmente, todos os templates base do Zabbix têm um item de SNMP.
- Nome do Item: SNMP Traps (Fallback)
- Tipo: Trap SNMP
- Chave: snmptrap.fallback
- Tipo de informação: Log
- Formato de data no log: hh:mm:sszyyyy/MM/dd
E podemos criar um item específico par amonitoramento de traps referentes as interfaces de rede, basta alterarmos a chave:
- Nome do Item: SNMP Traps: Link Caiu
- Tipo: Trap SNMP
- Chave: snmptrap[IF-MIB::linkDown]
- Tipo de informação: Log
- Formato de data no log: hh:mm:sszyyyy/MM/dd
E criamos um alarme para toda vez que recebermos uma trap de uma interface:
- Nome da trigger:
SNMP TRAP Recebido – Interface Caiu – {{ITEM.LASTVALUE}.regsub("IF-MIB::ifDescr.\\'(.*?)\\'", \1)}
- Dados Operacionais:
{{ITEM.LASTVALUE}.regsub("IF-MIB::ifDescr.\\'(.*?)\\'", \1)}
- Expressão:
nodata(/Template – MIB2 – Interfaces/snmptrap[IF-MIB::linkDown],1m)=0