Receber traps SNMP é o oposto de consultar dispositivos habilitados para SNMP.
Neste caso, as informações são enviadas de um dispositivo habilitado para SNMP para o snmptrapd e são coletadas ou "capturadas" pelo Zabbix server ou Zabbix proxy a partir de um arquivo.
Normalmente, traps são enviadas após alguma alteração de condição e o agent conecta-se ao server na porta 162 (em oposição à porta 161 no lado do agent que é usada para consultas). O uso de traps pode detectar alguns problemas rápidos que ocorrem entre o intervalo de consulta e podem ser perdidos pelos dados de consulta.
O recebimento de traps SNMP no Zabbix foi projetado para funcionar com o snmptrapd e um dos mecanismos para passar as traps para o Zabbix - seja um script Bash ou Perl ou SNMPTT.
A maneira mais simples de configurar o monitoramento de traps após configurar o Zabbix é usar a solução de script Bash, porque Perl e SNMPTT geralmente não estão presentes em distribuições modernas e exigem uma configuração mais complexa. No entanto, esta solução usa um script configurado como traphandle. Para melhor desempenho em sistemas de produção, use a solução Perl embutida (seja script com a opção do perl ou SNMPTT).
O fluxo de trabalho para receber uma trap:
snmptrapd recebe uma trapsnmptrapd passa a trap para o script receptor (Bash, Perl) ou SNMPTTsnmptrap[regexp]. A trap é definida como o valor de todos os items correspondentes. Se nenhum item correspondente for encontrado e houver um item snmptrap.fallback, a trap é definida como o valor desse item.Durante a troca de nó em alta disponibilidade (HA), o Zabbix continuará o processamento após o último registro dentro do último timestamp ISO 8601; se o mesmo registro não for encontrado, apenas o timestamp será usado para identificar a última posição.
Este tipo de item requer a seguinte configuração no frontend.
1. Crie uma interface SNMP para seu host
2. Configure o item
| Chave | ||
|---|---|---|
| Descrição | Valor de retorno | Comentários |
| snmptrap[regexp] | ||
| Captura todas as traps SNMP que correspondem à expressão regular especificada em regexp. Se regexp não for especificado, captura qualquer trap. | Trap SNMP | Este item só pode ser definido para interfaces SNMP. Macros de usuário e expressões regulares globais são suportadas no parâmetro desta chave de item. |
| snmptrap.fallback | ||
| Captura todas as traps SNMP que não foram capturadas por nenhum dos itens snmptrap[] para essa interface. | Trap SNMP | Este item só pode ser definido para interfaces SNMP. |
A correspondência de expressões regulares multilinha não é suportada no momento.
Para ler os traps, o server ou proxy do Zabbix deve ser configurado para iniciar o processo SNMP trapper e apontar para o arquivo de trap que está sendo gravado pelo SNMPTT ou por um receptor de trap Bash/Perl. Para isso, edite o arquivo de configuração (zabbix_server.conf ou zabbix_proxy.conf):
Se o parâmetro systemd PrivateTmp for usado, é improvável que este arquivo funcione em /tmp.
Requisitos: apenas snmptrapd.
Um script receptor de trap Bash pode ser usado para passar traps para o server do Zabbix a partir do snmptrapd usando o arquivo trapper. Para configurá-lo, adicione a opção traphandle ao arquivo de configuração do snmptrapd (snmptrapd.conf), veja exemplo.
O snmptrapd pode precisar ser reiniciado para aplicar as alterações em sua configuração.
Requisitos: Perl, Net-SNMP compilado com --enable-embedded-perl (feito por padrão desde o Net-SNMP 5.4)
Um receptor de traps Perl (procure por misc/snmptrap/zabbix_trap_receiver.pl) pode ser usado para passar traps diretamente para o Zabbix server a partir do snmptrapd. Para configurá-lo:
O snmptrapd pode precisar ser reiniciado para aplicar as alterações em sua configuração.
Se o nome do script não estiver entre aspas, o snmptrapd se recusará a iniciar com mensagens semelhantes a estas:
Primeiro, o snmptrapd deve ser configurado para usar o SNMPTT.
Para melhor desempenho, o SNMPTT deve ser configurado como um daemon usando snmptthandler-embedded para passar os traps para ele. Veja instruções para configurar o SNMPTT.
Quando o SNMPTT estiver configurado para receber os traps, configure o snmptt.ini:
O pacote "net-snmp-perl" foi removido no RHEL 8.0-8.2; re-adicionado no RHEL 8.3. Para mais informações, veja os problemas conhecidos.
Agora formate os traps para que o Zabbix possa reconhecê-los (edite o snmptt.conf):
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)Não use traps desconhecidos - o Zabbix não será capaz de reconhecê-los. Traps desconhecidos podem ser tratados definindo um evento geral no snmptt.conf:
Todos os receptores de trap Perl personalizados e a configuração de trap SNMPTT devem formatar o trap da seguinte maneira:
onde
Observe que "ZBXTRAP" e "[endereço]" serão removidos da mensagem durante o processamento. Se o trap for formatado de outra forma, o Zabbix poderá interpretar os traps de forma inesperada.
Exemplo de trap:
2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" localhost - ZBXTRAP 192.168.1.1 Link down on interface 2. Admin state: 1. Operational state: 2Isso resultará no seguinte trap para a interface SNMP com IP=192.168.1.1:
2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events"
localhost - Link down on interface 2. Admin state: 1. Operational state: 2Recomenda-se instalar arquivos MIB para garantir que os valores dos items sejam exibidos no formato correto. Sem os arquivos MIB, podem ocorrer problemas de formatação, como exibir valores em HEX em vez de UTF-8 ou vice-versa.
O Zabbix possui suporte a arquivos grandes para arquivos de SNMP trapper. O tamanho máximo de arquivo que o Zabbix pode ler é 2^63 (8 EiB). Observe que o sistema de arquivos pode impor um limite inferior ao tamanho do arquivo.
O Zabbix não fornece nenhum sistema de rotação de logs - isso deve ser tratado pelo usuário. A rotação de logs deve primeiro renomear o arquivo antigo e só depois excluí-lo para que nenhum trap seja perdido:
Devido à implementação do arquivo trap, o Zabbix precisa que o sistema de arquivos suporte inodes para diferenciar arquivos (a informação é adquirida por uma chamada stat()).
Este exemplo usa snmptrapd e um script Bash receptor para passar traps para o Zabbix server.
Configuração:
zabbix_server.conf:/usr/sbin/zabbix_trap_handler.sh:curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/trunk/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.shSe necessário, ajuste a variável ZABBIX_TRAPS_FILE no script. Para usar o valor padrão, crie primeiro o diretório pai:
snmtrapd.conf (consulte um exemplo funcional)Pode ser necessário reiniciar o snmptrapd para que ele reconheça as alterações em sua configuração.
Crie um item SNMP TESTE (lembre-se dos requisitos de configuração iniciais):
Tipo: SNMP trap
Tipo de informação: Log Interface do host: SNMP 127.0.0.1
Chave: snmptrap["linkUp"]
Formato de hora do log: yyyyMMdd.hhmmss
Observe que o formato de data e hora ISO 8601 é usado.
snmptrapd para a versão do protocolo SNMP escolhida e enviar traps de teste usando o utilitário snmptrap.Os protocolos SNMPv1 e SNMPv2 dependem da autenticação por "community string". No exemplo abaixo, usaremos "secret" como community string. Ela deve ser definida com o mesmo valor nos emissores de SNMP trap.
Observe que, embora ainda seja amplamente utilizado em ambientes de produção, o SNMPv2 não oferece nenhuma criptografia e autenticação real do remetente. Os dados são enviados em texto simples e, portanto, essas versões do protocolo só devem ser usadas em ambientes seguros, como redes privadas, e nunca devem ser usadas em redes públicas ou de terceiros.
A versão 1 do SNMP praticamente não é mais utilizada, pois não suporta contadores de 64 bits e é considerada um protocolo legado.
Para habilitar o recebimento de traps SNMPv1 ou SNMPv2, adicione a seguinte linha ao snmptrapd.conf. Substitua "secret" pela community string SNMP configurada nos emissores de SNMP trap:
Em seguida, podemos enviar uma trap de teste usando o snmptrap. Usaremos o OID comum "link up" neste exemplo:
O SNMPv3 resolve os problemas de segurança do SNMPv1/v2 e fornece autenticação e criptografia. Você pode usar os métodos de autenticação MD5 ou múltiplos SHA e DES/múltiplos AES como cifra.
Para habilitar o recebimento de SNMPv3, adicione as seguintes linhas ao snmptrapd.conf:
Observe a palavra-chave "execute", que permite executar scripts para este modelo de segurança de usuário.
snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0Se desejar usar métodos de criptografia fortes, como AES192 ou AES256, use net-snmp a partir da versão 5.8. Pode ser necessário recompilá-lo com a opção configure: --enable-blumenthal-aes. Versões mais antigas do net-snmp não suportam AES192/AES256. Veja também: Strong Authentication or Encryption.
Em ambos os exemplos, você verá linhas semelhantes em seu /var/lib/zabbix/snmptraps/snmptraps.log:
2024-01-30T10:04:23+0200 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0O valor do item no Zabbix será:
2024-01-30 10:04:23 2024-01-30 10:04:21
2024-01-30T10:04:21+0200 UDP: [127.0.0.1]:56585->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 2538834
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0Exemplo com Perl:
2024-01-30T11:42:54+0200 ZBXTRAP 127.0.0.1
PDU INFO:
receivedfrom UDP: [127.0.0.1]:58649->[127.0.0.1]:162
notificationtype TRAP
version 1
community public
errorstatus 0
transactionid 1
requestid 2101882550
messageid 0
errorindex 0
VARBINDS:
DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (457671) 1:16:16.71
SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp.0