Receber traps SNMP é o oposto de consultar dispositivos habilitados para SNMP.
Neste caso, a informação é enviada de um dispositivo habilitado para SNMP e é coletada ou "trapped" pelo Zabbix.
Normalmente, traps são enviadas quando há alguma mudança de condição, e o agente se conecta ao servidor na porta 162 (ao contrário da porta 161 no lado do agente, usada para consultas). O uso de traps pode detectar problemas curtos que ocorrem entre os intervalos de consulta e podem ser perdidos pelos dados de consulta.
Receber traps SNMP no Zabbix é projetado para funcionar com o snmptrapd e um dos mecanismos para passar as traps para o Zabbix – seja um script Bash ou Perl, ou o SNMPTT.
A maneira mais simples de configurar o monitoramento de traps após a configuração do Zabbix é usar a solução com script Bash, pois Perl e SNMPTT geralmente estão ausentes em distribuições modernas e requerem uma configuração mais complexa. No entanto, essa solução usa um script configurado como traphandle
. Para melhor desempenho em sistemas de produção, use a solução Perl embutida (script com a opção do perl
ou SNMPTT).
O workflow para receber uma trap é o seguinte:
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 itens correspondentes. Se nenhum item correspondente for encontrado e houver um item snmptrap.fallback
, - a trap é definida como o valor desse item#### Configurando traps SNMP
A configuração dos seguintes campos no frontend é específica para este tipo de item:
Em Configuração → Hosts, no campo Host interface, configure uma interface SNMP com o IP ou endereço DNS correto. O endereço de cada trap recebida é comparado aos endereços IP e DNS de todas as interfaces SNMP para encontrar os hosts correspondentes.
No campo Key, utilize uma das chaves de trap SNMP:
Key | ||
---|---|---|
Descrição | Valor de retorno | Comentários |
snmptrap[regexp] | ||
Captura todas as traps SNMP que correspondem à regular expression especificada em regexp. Se regexp não for especificado, captura qualquer trap. | Trap SNMP | Este item só pode ser configurado 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. | SNMP trap | Este item só pode ser configurado para interfaces SNMP. |
Atualmente, a correspondência com expressões regulares de várias linhas não é suportada.
Defina o Tipo de informação como 'Log' para que os carimbos de data/hora sejam analisados. Observe que outros formatos, como como 'Numérico', também são aceitáveis, mas podem exigir um manipulador de traps personalizado.
Para o monitoramento de traps SNMP funcionar, ele deve ser configurado corretamente (veja abaixo).
Para ler as traps, o servidor ou proxy Zabbix deve ser configurado para iniciar o processo SNMP trapper e apontar para o arquivo de traps que está sendo escrito pelo SNMPTT ou por um receptor de traps em Bash/Perl. Para isso, edite o arquivo de configuração (zabbix_server.conf ou zabbix_proxy.conf):
Se o parâmetro systemd PrivateTmp do systemd for usado, esse arquivo provavelmente não funcionará em /tmp.
Requisitos: apenas snmptrapd.
Um script de receptor de traps em Bash pode ser usado para passar traps diretamente do snmptrapd para o servidor Zabbix. Para configurá-lo, adicione a opção traphandle
no arquivo de configuração do (snmptrapd.conf
), veja exemplo.
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 as traps para ele. Veja as instruções para configurar SNMPTT.
Quando o SNMPTT estiver configurado para receber as traps, configure o arquivosnmptt.ini
:
O pacote "net-snmp-perl" foi removido no RHEL 8.0-8.2 e readicionado no RHEL 8.3. Para mais informações, veja os problemasconhecidos.
Agora, formate as traps para que o Zabbix as reconheça (edite o arquivo 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 desconhecidas – o Zabbix não conseguirá reconhecê-las. Traps desconhecidas podem ser tratadas definindo um evento geral no snmptt.conf:
Requisitos: Perl, Net-SNMP compilado com--enable-embedded-perl (feito por padrão desde o Net-SNMP 5.4)
Um receptor de traps em Perl (procure por misc/snmptrap/zabbix_trap_receiver.pl) pode ser usado para passar traps diretamente do snmptrapd para o servidor Zabbix. Para configurá-lo:
Se o nome do script não estiver entre aspas, o snmptrapd se recusará a iniciar, mostrando mensagens semelhantes a estas:
Todos os receptores de trap personalizados em Perl e as configurações de trap SNMPTT devem formatar o trap da seguinte forma:
onde
Note que "ZBXTRAP" e "[address]" serão removidos da mensagem durante o processamento. Se o trap for formatado de outra forma, o Zabbix pode interpretar os traps de maneira inesperada.
Exemplo de trap:
11:30:15 2011/07/27 .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: 2
Isso resultará no seguinte trap para a interface SNMP com IP=192.168.1.1:
11:30:15 2011/07/27 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events"
localhost - Link down on interface 2. Admin state: 1. Operational state: 2
O Zabbix oferece suporte a arquivos grandes para arquivos de trap SNMP. O tamanho máximo de arquivo que o Zabbix pode ler é 2^63 (8 EiB). Note que o sistema de arquivos pode impor um limite menor no tamanho dos arquivos.
O Zabbix não fornece um sistema de rotação de logs – isso deve ser gerenciado pelo usuário. A rotação de logs deve primeiro renomear o arquivo antigo e somente depois excluí-lo, para que nenhuma trap seja perdida:
Devido à implementação de arquivos de trap, o Zabbix precisa que o sistema de arquivos suporte inodes para diferenciar arquivos (a informação é obtida por meio de uma chamada stat() call).
Este exemplo usa o snmptrapd e um script Bash para receber e passar traps para o servidor Zabbix.
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/6.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh
Se necessário, ajuste a variável ZABBIX_TRAPS_FILE no script. Para utilizar o valor padrão, crie o diretório pai primeiro:
snmtrapd.conf
(consulte o exemplo example)Crie um item SNMP TEST:
IP da interface do host: 127.0.0.1
Chave: snmptrap["linkup"]
Formato do log:: yyyyMMdd.hhmmss
A seguir, configuraremos o snmptrapd
para a versão escolhida do protocolo SNMP e enviaremos traps de teste usando o utilitário snmptrap
.
Os protocolos SNMPv1 e SNMPv2 usam "community string" para autenticação. No exemplo abaixo, usaremos "secret" como community string. Esse valor deve ser configurado com o mesmo valor nos emissores de traps SNMP.
Note que, apesar de amplamente utilizado em ambientes de produção, o SNMPv2 não oferece criptografia nem autenticação real do remetente. Os dados são enviados em texto simples, e essas versões do protocolo só devem ser usadas em ambientes seguros, como redes privadas, e nunca em redes públicas ou de terceiros.
A versão SNMP 1 não é muito utilizada hoje em dia, pois não suporta contadores de 64 bits e é considerada um protocolo legado.
Para permitir o recebimento de traps SNMPv1 ou SNMPv2, adicione a seguinte linha em snmptrapd.conf
. Substitua "secret" pela community string configurada nos emissores de traps SNMP:
Agora podemos enviar um trap de teste usando o snmptrap
. Vamos usar o OID como um "link up" neste exemplo:
O SNMPv3 resolve as questões de segurança do SNMPv1/v2 e oferece autenticação e criptografia. Você pode usar os métodos de autenticação MD5 ou múltiplos SHA e os algoritmos de cifra DES/múltiplos AES.
Para habilitar a aceitação de SNMPv3, adicone as seguintes linhas no snmptrapd.conf
:
Observe que a palavra-chave "execute" permite executar scripts para o modelo de segurança do usuário.
snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0
Se você quiser usar métodos de criptografia fortes, como AES192 ou AES256, utilize o net-snmp a partir da versão 5.8. Você pode precisar 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: http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption
Em ambos os exemplos, você verá linhas semelhantes no arquivo /var/lib/zabbix/snmptraps/snmptraps.log
:
20220805.102235 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:35736->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
O valor do item no Zabbix será:
2022-08-05 10:22:35 2022-08-05 10:22:33
20220805.102233 UDP: [127.0.0.1]:35736->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0