Áú»¢¶Ä²©

3 Traps SNMP

Vis?o geral

O fluxo de comunica??o de uma 'trap SNMP' ¨¦ o inverso do de uma coleta.

Para este tipo de item o dispositivo monitorado inicia a comunica??o enviando um 'trap' que ¨¦ coletado pelo processo 'Áú»¢¶Ä²© Trapper' que est¨¢ presente o Áú»¢¶Ä²© Server e no Áú»¢¶Ä²© Proxy.

Normalmente as 'traps' s?o enviadas quando determinada condi??o ocorre, a partir desta mudan?a o Agente SNMP se conecta ao servidor SNMP (no caso o Áú»¢¶Ä²© Trapper) usando a porta 162 (para as consultas SNMP ¨¦ utilizada a porta 161). Usando 'traps' voc¨º poder¨¢ detectar problemas logo que ocorrerem, sem ter que aguardar uma eventual fila de coletas.

O recebimento de 'traps SNMP' no zabbix foi desenvolvido para funcionar em conjunto com o snmptrapd chamando um script perl ou SNMPTT.

O 'workflow' de um recebimento de trap:

  1. snmptrapd recebe a trap
  2. snmptrapd envia o dado para o SNMPTT ou chama um 'trap receiver' escrito em Perl
  3. O SNMPTT ou o 'Perl trap receiver' interpreta, formata e grava o dado em um arquivo
  4. O 'Áú»¢¶Ä²© SNMP trapper' l¨º e interpreta os dados do arquivo
  5. Para cada trap o Áú»¢¶Ä²© procura todos os itens de "SNMP trapper" com interfaces compat¨ªveis com a origem do dado. Observe que somente o "IP" ou o "DNS" da interface do host ser¨¢ utilizado durante a pesquisa.
  6. Para cada item localizado, a trap ser¨¢ comparada com a express?o regular em "snmptrap[regexp]". O dado da trap ser¨¢ enviado como um novo valor para todos os itens compat¨ªveis. Se n?o for encontrado um item compat¨ªvel, e existir um item de "snmptrap.fallback" definido, o valor ser¨¢ repassado para ele.
  7. Se a trap n?o conseguir salvar o valor recebido em nenhum item, o Áú»¢¶Ä²© ir¨¢ registrar isso no "log de traps n?o correspondentes

". (Que pode ser habilitado atrav¨¦s da op??o "Registrar traps SNMP n?o correspondentes" dispon¨ªvel em Administra??o ¡ú Geral ¡ú Outros.)

3.1 Configurando as traps SNMP

A configura??o dos campos a seguir ¨¦ espec¨ªfica para itens deste tipo:

  • Voc¨º precisar¨¢ possuir uma interface SNMP

Em Configura??o ¡ú Hosts, no campo Interface do Host defina uma interface com o IP ou DNS correto. O endere?o de cada trap recebida ¨¦ comparada com o IP ou com o DNS de todas as interfaces SNMP para localizar os hosts correspondentes.

  • Configure o item

Utilize uma das chaves de trap SNMP no campo Chave do item:

Chave
Descri??o Valor retornado °ä´Ç³¾±ð²Ô³Ù¨¢°ù¾±´Ç²õ
snmptrap[regexp]
Captura qualquer trap SNMP que corresponda com um endere?o definido pela express?o regular informada no campo regexp Trap SNMP Este item s¨® pode ser definido em interfaces SNMP.
Este item ¨¦ suportado desde o Áú»¢¶Ä²© 2.0.0.
Observa??o: A partir do Áú»¢¶Ä²© 2.0.5, macros de usu¨¢rio e express?es globais s?o suportadas para este tipo de item.
snmptrap.fallback
Captura todas as traps SNMP de um determinado IP que n?o tenha sido recebida por nenhum item snmptrap[] daquela interface Trap SNMP Este item s¨® pode ser definido em interfaces SNMP.
Este item ¨¦ suportado desde o Áú»¢¶Ä²© 2.0.0.

Express?es regulares de v¨¢rias linhas n?o s?o suportadas neste momento.

Defina o Tipo da informa??o para 'Log' para que os registros de hora sejam processados. Observe que qualquer outro formato, tal qual o num¨¦rico, tamb¨¦m s?o aceit¨¢veis mas requerem um gerenciador de trap personalizado.

Para a monitora??o de trap SNMP, voc¨º primeiro dever¨¢ configura-la.

3.2 Configurando a monitora??o via SNMP trap

Configurando o Áú»¢¶Ä²© Server/Proxy

Para receber as traps, o Áú»¢¶Ä²© Server/Proxy dever¨¢ estar configurado para iniciar o processo de SNMP trapper e apontado para o arquivo de traps que estar¨¢ sendo alimentado pelo SNMPTT ou pelo 'perl trap receiver'. Para fazer isso, edite o arquivo de configura??o (zabbix_server.conf ou zabbix_proxy.conf):

  1. StartSNMPTrapper=1
  2. SNMPTrapperFile=[TRAP FILE]

Se o par?metro do systemd tiver sido definido ¨¦ improv¨¢vel que funcione no /tmp.

Configurando o SNMPTT

Primeiramente o 'snmptrapd' precisa estar configurado para utilizar o SNMPTT.

Para uma melhor performance, o SNMPTT precisa estar configurado como um daemon utilizando o snmptthandler-embedded para enviar as traps. Veja mais intru??es sobre configura??o do SNMPTT neste endere?o:

Quando o SNMPTT estiver apto a receber as 'traps', ajuste-o para registrar as traps:

  1. registre as traps no arquivo de traps que ser¨¢ lido pelo Áú»¢¶Ä²©:
    log_enable = 1
    log_file = [TRAP FILE]
  2. defina o formato de data e hora:
    date_time_format = %H:%M:%S %Y/%m/%d = [DATE TIME FORMAT]

Agora formate as traps de forma a possibilitar que o Áú»¢¶Ä²© as reconhe?a (edite o arquivo snmptt.conf):

  1. Cada instru??o de formato dever¨¢ come?ar com "ZBXTRAP [address]", onde [address] ser¨¢ o valor usado na compara??o com as interfaces (pelo IP ou DNS). Exemplo.:
    EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
    FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
  2. Veja mais sobre formato de SNMP trap a seguir

N?o utilize traps 'n?o esperadas' - o Áú»¢¶Ä²© n?o estar¨¢ apto a reconhece-las. Traps n?o esperadas podem ser tratadas ao definir um evento geral no snmptt.conf:
EVENT general .* "General event" Normal

Configurando o Perl trap receiver

Requerimentos: Perl, pacote Net-SNMP compilado com --enable-embedded-perl (j¨¢ ¨¦ padr?o no Net-SNMP 5.4)

'Perl trap receiver' (olhe em misc/snmptrap/zabbix_trap_receiver.pl) poder¨¢ ser utilizado para encaminhar as traps para o Áú»¢¶Ä²© Server/Proxy diretamente a partir do snmptrapd. Para configurar:

  • adicione o script perl no arquivo de configura??o do 'snmptrapd' (snmptrapd.conf), Exemplo:
    perl do "[FULL PATH TO PERL RECEIVER SCRIPT]";
  • configure o recebedor, exemplo:
    $SNMPTrapperFile = '[TRAP FILE]';
    $DateTimeFormat = '[DATE TIME FORMAT]';

Se o nome do script n?o estiver entre aspas, o snmptrapd ir¨¢ se recusar a iniciar com mensagens similares 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
Formato do SNMP trap

Tanto os 'perl trap receivers' quanto o 'SNMPTT trap configuration' precisam formatar a trap conforme o padr?o a seguir: [timestamp] [the trap, part 1] ZBXTRAP [address] [the trap, part 2], onde

  • [timestamp] - momento de ocorr¨ºncia do evento
  • ZBXTRAP - cabe?alho que indica o in¨ªcio de uma nova linha de trap
  • [address] - endere?o IP para localizar o host a receber a trap

Observe que o "ZBXTRAP" e o "[address]" ser?o removidos da mensagem durante o processamento. Se a trap utilizar outro formato, o Áú»¢¶Ä²© pode analisa-las de forma 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
Esta trap ser¨¢ enviada para um host com 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.

3.3 Requerimentos de sistema

Rota??o de logs

O Áú»¢¶Ä²© n?o prov¨º rota??o de logs que possa ser gerida pelo usu¨¢rio. A rota??o de logs primeiro ir¨¢ renomear o arquivo antigo e ap¨®s isso apaga-lo para garantir que nenhuma trap ser¨¢ perdida, conforme processo a seguir:

  1. O Áú»¢¶Ä²© abre o arquivo de traps na ¨²ltima posi??o conhecida e vai para o passo 3
  2. O Áú»¢¶Ä²© verifica se o arquivo aberto j¨¢ foi rotacionado ao comparar o n¨²mero do inode definido para o mesmo. Se n?o existe arquivo aberto, o Áú»¢¶Ä²© reseta a informa??o de ¨²ltima posi??o conhecida e retorna ao passo 1.
  3. O Áú»¢¶Ä²© l¨º o dado do arquivo aberto e define uma nova localiza??o.
  4. Os novos dados s?o analisados. Se era o arquivo rotacionado, o arquivo ¨¦ fechado e retorna ao passo 2.
  5. Se n?o existe novo dado, o Áú»¢¶Ä²© aguarda 1 segundo e retorna ao passo 2.

O tamanho m¨¢ximo de um arquivo de log para o Áú»¢¶Ä²© ¨¦ de 2GB. O arquivo de log precisa ser rotacionado antes deste limite.

Sistema de arquivos

Devido ¨¤ forma de implementa??o, o Áú»¢¶Ä²© precisa que o sistema de arquivos suporte inodes para diferenciar os arquivos (a informa??o ¨¦ obtida atrav¨¦s da fun??o stat()).

3.4 Exemplo de configura??o

Este exemplo utiliza o snmptrapd + SNMPTT para enviar traps ao Áú»¢¶Ä²© Server:

  1. zabbix_server.conf - configure o Áú»¢¶Ä²© para iniciar o SNMP trapper e defina a localiza??o do arquivo file:
    StartSNMPTrapper=1
    SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
  2. snmptrapd.conf - adicione o SNMPTT como o gerenciador de traps:
    traphandle default snmptt
  3. snmptt.ini - configure o arquivo de sa¨ªda e o formato de hora:
    log_file = /tmp/my_zabbix_traps.tmp
    date_time_format = %H:%M:%S %Y/%m/%d
  4. snmptt.conf - defina o formato padr?o de trap:
    EVENT general .* "General event" Normal
    FORMAT ZBXTRAP $aA $ar
  5. Crie um item SNMP TEST:
    IP da Interface SNMP do Host IP: 127.0.0.1
    Chave: snmptrap["General"]
    Formato de hora do log: hh:mm:ss yyyy/MM/dd

Teste o funcionamento:

  1. Comando utilizado para enviar uma trap:
    snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "teststring000"
  2. Que ser¨¢ recebida:
    15:48:18 2011/07/26 .1.3.6.1.6.3.1.1.5.3.0.33 Normal "General event" localhost - ZBXTRAP 127.0.0.1 127.0.0.1
  3. Valor par ao teste do item:
    15:48:18 2011/07/26 .1.3.6.1.6.3.1.1.5.3.0.33 Normal "General event" localhost - 127.0.0.1

Este exemplo simples utiliza o SNMPTT como traphandle. Para melhor performance em ambientes de produ??o, utilize um script Perl para encaminhar as traps do snmptrapd ao SNMPTT ou diretamente ao Áú»¢¶Ä²©.

3.5 Setup example

This example uses snmptrapd + SNMPTT to pass traps to Áú»¢¶Ä²© server. Setup:

  1. zabbix_server.conf - configure Áú»¢¶Ä²© to start SNMP trapper and set the trap file:
    StartSNMPTrapper=1
    SNMPTrapperFile=/tmp/my_zabbix_traps.tmp
  2. snmptrapd.conf - add SNMPTT as the trap handler:
    traphandle default snmptt
  3. snmptt.ini -
    enable the use of the Perl module from the NET-SNMP package:
    net_snmp_perl_enable = 1
    configure output file and time format:
    log_file = /tmp/my_zabbix_traps.tmp
    date_time_format = %H:%M:%S %Y/%m/%d
  4. snmptt.conf - define a default trap format:
    EVENT general .* "General event" Normal
    FORMAT ZBXTRAP $aA $ar
  5. Create an SNMP item TEST:
    Host's SNMP interface IP: 127.0.0.1
    Key: snmptrap["General"]
    Log time format: hh:mm:ss yyyy/MM/dd

This results in:

  1. Command used to send a trap:
    snmptrap -v 1 -c public 127.0.0.1 '.1.3.6.1.6.3.1.1.5.3' '0.0.0.0' 6 33 '55' .1.3.6.1.6.3.1.1.5.3 s "teststring000"
  2. The received trap:
    15:48:18 2011/07/26 .1.3.6.1.6.3.1.1.5.3.0.33 Normal "General event" localhost - ZBXTRAP 127.0.0.1 127.0.0.1
  3. Value for item TEST:
    15:48:18 2011/07/26 .1.3.6.1.6.3.1.1.5.3.0.33 Normal "General event" localhost - 127.0.0.1

This simple example uses SNMPTT as traphandle. For better performance on production systems, use embedded Perl to pass traps from snmptrapd to SNMPTT or directly to Áú»¢¶Ä²©.

3.6 See also