Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

3 Trampas SNMP

Descripción general

Recibir traps SNMP es lo opuesto a consultar dispositivos habilitados para SNMP.

En este caso, la información es enviada desde un dispositivo habilitado para SNMP a snmptrapd y es recolectada o "atrapada" por el servidor Zabbix o el proxy Zabbix desde un archivo.

Normalmente, los traps se envían ante algún cambio de condición y el agente se conecta al servidor en el puerto 162 (a diferencia del puerto 161 en el lado del agente que se utiliza para consultas). Usar traps puede detectar algunos problemas breves que ocurren entre el intervalo de consulta y que pueden ser pasados por alto por los datos de consulta.

La recepción de traps SNMP en Zabbix está diseñada para funcionar con snmptrapd y uno de los mecanismos para pasar los traps a Zabbix: ya sea un script Bash o Perl o SNMPTT.

La forma más sencilla de configurar la monitorización de traps después de configurar Zabbix es usar la solución de script Bash, porque Perl y SNMPTT a menudo no están presentes en las distribuciones modernas y requieren una configuración más compleja. Sin embargo, esta solución utiliza un script configurado como traphandle. Para un mejor rendimiento en sistemas de producción, utilice la solución Perl embebida (ya sea un script con la opción do perl o SNMPTT).

El flujo de trabajo para recibir un trap:

  1. snmptrapd recibe un trap
  2. snmptrapd pasa el trap al script receptor (Bash, Perl) o SNMPTT
  3. El receptor analiza, formatea y escribe el trap en un archivo
  4. El SNMP trapper de Zabbix lee y analiza el archivo de traps
  5. Para cada trap, Zabbix encuentra todas las métricas "SNMP trapper" con interfaces de equipo que coincidan con la dirección del trap recibido. Tenga en cuenta que solo el "IP" o "DNS" seleccionado en la interfaz del equipo se utiliza durante la coincidencia.
  6. Para cada métrica encontrada, el trap se compara con la expresión regular en snmptrap[regexp]. El trap se establece como el valor de todas las métricas coincidentes. Si no se encuentra ninguna métrica coincidente y existe una métrica snmptrap.fallback, el trap se establece como el valor de esa.
  7. Si el trap no se estableció como valor de ninguna métrica, Zabbix por defecto registra el trap no coincidente. (Esto se configura mediante "Registrar traps SNMP no coincidentes" en Administración > General > Otros.)
Notas sobre la conmutación por error en HA

Durante el cambio de nodo en alta disponibilidad (HA), Zabbix continuará procesando después del último registro dentro de la última marca de tiempo ISO 8601; si no se encuentra el mismo registro, entonces solo se utilizará la marca de tiempo para identificar la última posición.

Configuración de traps SNMP

Este tipo de métrica requiere la siguiente configuración en la interfaz web.

1. Crear una interfaz SNMP para su equipo

  • En Recopilación de datos > Equipos, cree/edite el equipo y, en el campo Interfaces, añada el tipo de interfaz "SNMP", especificando la dirección IP o DNS.

    La dirección de cada trap recibida se comparará con las direcciones IP y DNS de todas las interfaces SNMP para encontrar los equipos correspondientes.

2. Configurar la métrica

  • En Recopilación de datos > Equipos, cree/edite la métrica necesaria.
  • En el campo Clave, utilice una de las claves de trap SNMP:
Clave
Descripción Valor devuelto Comentarios
snmptrap[regexp]
Captura todas las traps SNMP que coincidan con la expresión regular especificada en regexp. Si no se especifica regexp, captura cualquier trap. Trap SNMP Esta métrica solo se puede establecer para interfaces SNMP.
Se admiten macros de usuario y expresiones regulares globales en el parámetro de esta clave de métrica.
snmptrap.fallback
Captura todas las traps SNMP que no fueron capturadas por ninguna de las métricas snmptrap[] para esa interfaz. Trap SNMP Esta métrica solo se puede establecer para interfaces SNMP.

La coincidencia de expresiones regulares multilínea no es compatible en este momento.

  • Establezca el Tipo de información en "Registro" para que se analicen las marcas de tiempo. Otros formatos como "Numérico" también son aceptables, pero pueden requerir un manejador de traps personalizado.

Configuración de la monitorización de traps SNMP

Configuración del servidor/proxy Zabbix

Para leer los traps, el servidor o proxy Zabbix debe configurarse para iniciar el proceso SNMP trapper y apuntar al archivo de traps que está siendo escrito por SNMPTT o un receptor de traps Bash/Perl. Para ello, edite el archivo de configuración (zabbix_server.conf o zabbix_proxy.conf):

StartSNMPTrapper=1
       SNMPTrapperFile=[ARCHIVO DE TRAPS]

Si se utiliza el parámetro systemd PrivateTmp, es poco probable que este archivo funcione en /tmp.

Configuración del receptor de traps Bash

Requisitos: solo snmptrapd.

Se puede utilizar un script receptor de traps Bash para pasar traps al servidor Zabbix desde snmptrapd usando el archivo trapper. Para configurarlo, agregue la opción traphandle al archivo de configuración de snmptrapd (snmptrapd.conf), vea el ejemplo.

Es posible que sea necesario reiniciar snmptrapd para que recoja los cambios en su configuración.

Configuración del receptor de traps Perl

Requisitos: Perl, Net-SNMP compilado con --enable-embedded-perl (realizado por defecto desde Net-SNMP 5.4)

Un receptor de traps Perl (busque misc/snmptrap/zabbix_trap_receiver.pl) puede usarse para pasar traps al servidor Zabbix directamente desde snmptrapd. Para configurarlo:

  • agregue el script Perl al archivo de configuración de snmptrapd (snmptrapd.conf), por ejemplo:
perl do "[RUTA COMPLETA AL SCRIPT RECEPTOR PERL]";
  • configure el receptor, por ejemplo:
$SNMPTrapperFile = '[ARCHIVO DE TRAPS]';
       $DateTimeFormat = '[FORMATO FECHA HORA]';

snmptrapd podría necesitar ser reiniciado para aplicar los cambios en su configuración.

Si el nombre del script no está entre comillas, snmptrapd se negará a iniciarse con mensajes similares a los siguientes:

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
Configuración de SNMPTT

Primero, se debe configurar snmptrapd para usar SNMPTT.

Para obtener el mejor rendimiento, SNMPTT debe configurarse como un demonio usando snmptthandler-embedded para pasarle los traps. Consulte las instrucciones para configurar SNMPTT.

Cuando SNMPTT esté configurado para recibir los traps, configure snmptt.ini:

  1. habilite el uso del módulo Perl del paquete NET-SNMP:
net_snmp_perl_enable = 1
  1. registre los traps en el archivo de traps que será leído por Zabbix:
log_enable = 1
       log_file = [TRAP FILE]
  1. establezca el formato de fecha y hora:
date_time_format = %Y-%m-%dT%H:%M:%S%z

El paquete "net-snmp-perl" ha sido eliminado en RHEL 8.0-8.2; reincorporado en RHEL 8.3. Para más información, consulte los problemas conocidos.

Ahora formatee los traps para que Zabbix los reconozca (edite snmptt.conf):

  1. Cada declaración FORMAT debe comenzar con "ZBXTRAP [dirección]", donde [dirección] se comparará con las direcciones IP y DNS de las interfaces SNMP en Zabbix. Por ejemplo:
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
       FORMAT ZBXTRAP $aA Dispositivo reinicializado (coldStart)
  1. Consulte más información sobre el formato de traps SNMP a continuación.

No utilice traps desconocidos: Zabbix no podrá reconocerlos. Los traps desconocidos pueden manejarse definiendo un evento general en snmptt.conf:

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

Todos los receptores de traps Perl personalizados y la configuración de traps SNMPTT deben formatear el trap de la siguiente manera:

[timestamp] [el trap, parte 1] ZBXTRAP [dirección] [el trap, parte 2]

donde

  • [timestamp] - la marca de tiempo en formato "%Y-%m-%dT%H:%M:%S%z"
  • ZBXTRAP - cabecera que indica que un nuevo trap comienza en esta línea
  • [dirección] - dirección IP utilizada para encontrar el equipo para este trap

Tenga en cuenta que "ZBXTRAP" y "[dirección]" serán eliminados del mensaje durante el procesamiento. Si el trap se formatea de otra manera, Zabbix podría analizar los traps de forma inesperada.

Ejemplo 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

Esto dará como resultado el siguiente trap para la interfaz SNMP con 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 del sistema

Se recomienda instalar archivos MIB para garantizar que los valores de las métricas se muestren en el formato correcto. Sin los archivos MIB, pueden producirse problemas de formato, como mostrar valores en HEX en lugar de UTF-8 o viceversa.

Soporte para archivos grandes

Zabbix tiene soporte para archivos grandes en los archivos de SNMP trapper. El tamaño máximo de archivo que Zabbix puede leer es 2^63 (8 EiB). Tenga en cuenta que el sistema de archivos puede imponer un límite inferior al tamaño del archivo.

Rotación de logs

Zabbix no proporciona ningún sistema de rotación de logs; esto debe ser gestionado por el usuario. La rotación de logs debe primero renombrar el archivo antiguo y solo después eliminarlo para que no se pierdan traps:

  1. Zabbix abre el archivo de traps en la última ubicación conocida y pasa al paso 3
  2. Zabbix comprueba si el archivo actualmente abierto ha sido rotado comparando el número de inode con el número de inode del archivo de traps definido. Si no hay ningún archivo abierto, Zabbix restablece la última ubicación y vuelve al paso 1.
  3. Zabbix lee los datos del archivo actualmente abierto y establece la nueva ubicación.
  4. Los nuevos datos se analizan. Si este era el archivo rotado, el archivo se cierra y vuelve al paso 2.
  5. Si no había nuevos datos, Zabbix duerme durante 1 segundo y vuelve al paso 2.
Sistema de archivos

Debido a la implementación del archivo trap, Zabbix necesita que el sistema de archivos admita inodos para diferenciar archivos (la información se adquiere mediante una llamada a stat()).

Ejemplos de configuración utilizando diferentes versiones del protocolo SNMP

Este ejemplo utiliza snmptrapd y un script receptor en Bash para pasar traps al servidor Zabbix.

Configuración:

  1. Configure Zabbix para iniciar el receptor de traps SNMP y establezca el archivo de traps. Añada a zabbix_server.conf:
StartSNMPTrapper=1
       SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
  1. Descargue el script Bash en /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

Si es necesario, ajuste la variable ZABBIX_TRAPS_FILE en el script. Para usar el valor por defecto, cree primero el directorio padre:

mkdir -p /var/lib/zabbix/snmptraps
  1. Añada lo siguiente a snmtrapd.conf (consulte el ejemplo funcional)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh

Puede ser necesario reiniciar snmptrapd para que recoja los cambios en su configuración.

  1. Cree una métrica SNMP TEST (tenga en cuenta los requisitos de configuración iniciales):

    Tipo: SNMP trap
    Tipo de información: Log Interfaz del equipo: SNMP 127.0.0.1
    Clave: snmptrap["linkUp"]
    Formato de hora del log: yyyyMMdd.hhmmss

Tenga en cuenta que se utiliza el formato de fecha y hora ISO 8601.

  1. A continuación, configuraremos snmptrapd para la versión del protocolo SNMP elegida y enviaremos traps de prueba utilizando la utilidad snmptrap.
SNMPv1, SNMPv2

Los protocolos SNMPv1 y SNMPv2 se basan en la autenticación mediante "community string". En el ejemplo siguiente usaremos "secret" como community string. Debe establecerse el mismo valor en los emisores de traps SNMP.

Tenga en cuenta que, aunque todavía se utiliza ampliamente en entornos de producción, SNMPv2 no ofrece ningún cifrado ni autenticación real del emisor. Los datos se envían como texto plano y, por lo tanto, estas versiones del protocolo sólo deben utilizarse en entornos seguros, como redes privadas, y nunca deben usarse en redes públicas o de terceros.

La versión 1 de SNMP realmente ya no se utiliza, ya que no soporta contadores de 64 bits y se considera un protocolo heredado.

Para habilitar la aceptación de traps SNMPv1 o SNMPv2 debe añadir la siguiente línea a snmptrapd.conf. Sustituya "secret" por la community string SNMP configurada en los emisores de traps SNMP:

authCommunity log,execute,net secret

A continuación, podemos enviar un trap de prueba utilizando snmptrap. Usaremos el OID común "link up" en este ejemplo:

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

SNMPv3 resuelve los problemas de seguridad de SNMPv1/v2 y proporciona autenticación y cifrado. Puede utilizar los métodos de autenticación MD5 o múltiples SHA y DES/múltiples AES como cifrado.

Para habilitar la aceptación de SNMPv3 añada las siguientes líneas a snmptrapd.conf:

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

Tenga en cuenta la palabra clave "execute" que permite ejecutar scripts para este modelo de seguridad de usuario.

snmptrap -v 3 -n "" -a SHA -A mypassword -x AES -X mypassword -l authPriv -u traptest -e 0x8000000001020304 localhost 0 linkUp.0

Si desea utilizar métodos de cifrado fuertes como AES192 o AES256, utilice net-snmp a partir de la versión 5.8. Es posible que tenga que recompilarlo con la opción configure: --enable-blumenthal-aes. Las versiones anteriores de net-snmp no soportan AES192/AES256. Consulte también: Strong Authentication or Encryption.

Verificación

En ambos ejemplos verá líneas similares en su /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

El valor de la métrica en 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

Ejemplo con 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

Véase también