Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

3 Traps SNMP

Visão geral

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:

  1. O snmptrapd recebe uma trap
  2. O snmptrapd passa a trap para o script receptor (Bash, Perl) ou SNMPTT
  3. O receptor analisa, formata e grava a trap em um arquivo
  4. O Zabbix SNMP trapper lê e analisa o arquivo de trap
  5. Para cada trap, o Zabbix encontra todos os items "SNMP trapper" com interfaces de host que correspondem ao endereço da trap recebida. Observe que apenas o "IP" ou "DNS" selecionado na interface do host é usado durante a correspondência.
  6. Para cada item encontrado, a trap é comparada com a expressão regular em snmptrap[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.
  7. Se a trap não foi definida como valor de nenhum item, o Zabbix, por padrão, registra a trap não correspondida. (Isso é configurado por "Registrar traps SNMP não correspondidas" em Administração > Geral > Outros.)
Notas sobre failover de HA

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.

Configurando traps SNMP

Este tipo de item requer a seguinte configuração no frontend.

1. Crie uma interface SNMP para seu host

  • Em Coleta de dados > Hosts, crie/edite o host e, no campo Interfaces, adicione o tipo de interface "SNMP", especificando o endereço IP ou DNS.

    O endereço de cada trap recebida será comparado aos endereços IP e DNS de todas as interfaces SNMP para encontrar os hosts correspondentes.

2. Configure o item

  • Em Coleta de dados > Hosts, crie/edite o item necessário.
  • No campo Chave, use uma das chaves de trap SNMP:
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.

  • Defina o Tipo de informação como "Log" para que os timestamps sejam analisados. Outros formatos, como "Numérico", também são aceitáveis, mas podem exigir um manipulador de trap personalizado.

Configurando o monitoramento de traps SNMP

Configurando o server/proxy do Zabbix

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):

StartSNMPTrapper=1
       SNMPTrapperFile=[TRAP FILE]

Se o parâmetro systemd PrivateTmp for usado, é improvável que este arquivo funcione em /tmp.

Configurando o receptor de trap Bash

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.

Configurando o receptor de traps Perl

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:

  • adicione o script Perl ao arquivo de configuração do snmptrapd (snmptrapd.conf), por exemplo:
perl do "[CAMINHO COMPLETO PARA O SCRIPT PERL RECEIVER]";
  • configure o receptor, por exemplo:
$SNMPTrapperFile = '[ARQUIVO DE TRAP]';
       $DateTimeFormat = '[FORMATO DE DATA E HORA]';

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:

Regexp modifiers "/l" and "/a" are mutually exclusive at (eval 2) line 1, at end of line
       Regexp modifier "/l" may not appear twice at (eval 2) line 1, at end of line
Configurando o SNMPTT

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:

  1. habilite o uso do módulo Perl do pacote NET-SNMP:
net_snmp_perl_enable = 1
  1. registre os traps no arquivo de trap que será lido pelo Zabbix:
log_enable = 1
       log_file = [TRAP FILE]
  1. defina o formato de data e hora:
date_time_format = %Y-%m-%dT%H:%M:%S%z

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):

  1. Cada declaração FORMAT deve começar com "ZBXTRAP [address]", onde [address] será comparado aos endereços IP e DNS das interfaces SNMP no Zabbix. Por exemplo:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
       FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
  1. Veja mais sobre o formato do trap SNMP abaixo.

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:

EVENT general .* "General event" Normal
Formato do trap SNMP

Todos os receptores de trap Perl personalizados e a configuração de trap SNMPTT devem formatar o trap da seguinte maneira:

[timestamp] [o trap, parte 1] ZBXTRAP [endereço] [o trap, parte 2]

onde

  • [timestamp] - o timestamp no formato "%Y-%m-%dT%H:%M:%S%z"
  • ZBXTRAP - cabeçalho que indica que um novo trap começa nesta linha
  • [endereço] - endereço IP usado para encontrar o host para este trap

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: 2

Isso 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: 2

Requisitos do sistema

Recomenda-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.

Suporte a arquivos grandes

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.

Rotação de logs

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:

  1. O Zabbix abre o arquivo de trap na última localização conhecida e vai para o passo 3
  2. O Zabbix verifica se o arquivo atualmente aberto foi rotacionado comparando o número do inode com o número do inode do arquivo de trap definido. Se não houver arquivo aberto, o Zabbix redefine a última localização e volta para o passo 1.
  3. O Zabbix lê os dados do arquivo atualmente aberto e define a nova localização.
  4. Os novos dados são analisados. Se este era o arquivo rotacionado, o arquivo é fechado e volta para o passo 2.
  5. Se não houver novos dados, o Zabbix dorme por 1 segundo e volta para o passo 2.
Sistema de arquivos

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()).

Exemplos de configuração usando diferentes versões do protocolo SNMP

Este exemplo usa snmptrapd e um script Bash receptor para passar traps para o Zabbix server.

Configuração:

  1. Configure o Zabbix para iniciar o SNMP trapper e defina o arquivo de trap. Adicione ao zabbix_server.conf:
StartSNMPTrapper=1
       SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
  1. Baixe o script Bash para /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.sh

Se necessário, ajuste a variável ZABBIX_TRAPS_FILE no script. Para usar o valor padrão, crie primeiro o diretório pai:

mkdir -p /var/lib/zabbix/snmptraps
  1. Adicione o seguinte ao snmtrapd.conf (consulte um exemplo funcional)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh

Pode ser necessário reiniciar o snmptrapd para que ele reconheça as alterações em sua configuração.

  1. 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.

  1. Em seguida, vamos configurar o snmptrapd para a versão do protocolo SNMP escolhida e enviar traps de teste usando o utilitário snmptrap.
SNMPv1, SNMPv2

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:

authCommunity log,execute,net secret

Em seguida, podemos enviar uma trap de teste usando o snmptrap. Usaremos o OID comum "link up" neste exemplo:

snmptrap -v 2c -c secret localhost '' linkUp.0
SNMPv3

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:

createUser -e 0x8000000001020304 traptest SHA mypassword AES
       authuser log,execute traptest

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.0

Se 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.

Verificação

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.0

O 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.0

Exemplo 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

Veja também