3 Capturador 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 recopilada 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). El uso de traps puede detectar algunos problemas breves que ocurren entre el intervalo de consulta y que pueden pasar desapercibidos 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 utilizar la solución de script Bash, porque Perl y SNMPTT a menudo
faltan 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 integrada
(ya sea un script con la opción do perl o SNMPTT).
El flujo de trabajo para recibir un trap:
snmptrapdrecibe un trapsnmptrapdpasa el trap al script receptor (Bash, Perl) o SNMPTT- El receptor analiza, formatea y escribe el trap en un archivo
- El SNMP trapper de Zabbix lee y analiza el archivo de traps
- Para cada trap, Zabbix encuentra todos los ítems "SNMP trapper" con interfaces de host que coinciden con la dirección del trap recibido. Tenga en cuenta que solo el "IP" o "DNS" seleccionado en la interfaz del host se utiliza durante la coincidencia.
- Para cada ítem encontrado, el trap se compara con la expresión regular en
snmptrap[regexp]. El trap se establece como el valor de todos los ítems coincidentes. Si no se encuentra ningún ítem coincidente y existe un ítemsnmptrap.fallback, el trap se establece como el valor de este. - Si el trap no se estableció como valor de ningún ítem, 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 de HA
Durante el cambio de nodo de 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, solo se utilizará la marca de tiempo para identificar la última posición.
Configuración de traps SNMP
Este tipo de elemento requiere la siguiente configuración en la interfaz.
1. Crear una interfaz SNMP para su host
- En Recopilación de datos > Hosts, cree/edite el host 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 hosts correspondientes.
2. Configurar el elemento
- En Recopilación de datos > Hosts, cree/edite el elemento necesario.
- En el campo Clave, utilice una de las claves de trap SNMP:
| Clave | ||
|---|---|---|
| Descripción | Valor devuelto | Comentarios |
| snmptrap[regexp] | ||
| Captura todos los traps SNMP que coincidan con la expresión regular especificada en regexp. Si no se especifica regexp, captura cualquier trap. | Trap SNMP | Este elemento solo puede configurarse para interfaces SNMP. Se admiten macros de usuario y expresiones regulares globales en el parámetro de esta clave de elemento. |
| snmptrap.fallback | ||
| Captura todos los traps SNMP que no hayan sido capturados por ninguno de los elementos snmptrap[] para esa interfaz. | Trap SNMP | Este elemento solo puede configurarse para interfaces SNMP. |
Por el momento, no se admite la coincidencia de expresiones regulares multilínea.
- 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 supervisión de trampas SNMP
Configuración de Zabbix server/proxy
Para leer las traps, Zabbix server o proxy debe configurarse para iniciar el proceso SNMP trapper y apuntar al archivo de traps en el que está escribiendo 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=[TRAP FILE]
Si se utiliza el parámetro de 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
de receptor de traps Bash para pasar traps a Zabbix server desde snmptrapd usando un archivo trapper. Para
configurarlo, añada la opción traphandle al archivo de configuración de snmptrapd (snmptrapd.conf),
consulte el ejemplo.
Puede ser necesario reiniciar snmptrapd para que aplique los cambios en su configuración.
Configuración del receptor de capturas de Perl
Requisitos: Perl, Net-SNMP compilado con --enable-embedded-perl (hecho por defecto desde Net-SNMP 5.4)
Un receptor de trampas Perl (busque misc/snmptrap/zabbix_trap_receiver.pl) se puede utilizar para pasar trampas al servidor Zabbix directamente desde snmptrapd. A configurarlo:
- agregue el script Perl al archivo de configuración snmptrapd (snmptrapd.conf), por ejemplo:
perl hacer "[RUTA COMPLETA AL SCRIPT DEL RECEPTOR PERL]";
- configurar el receptor, por ejemplo:
$SNMPTrapperFile = '[ARCHIVO TRAMPA]';
$DateTimeFormat = '[FORMATO DE FECHA Y HORA]';
:::nota Es posible que sea necesario reiniciar snmptrapd para detectar cambios en su configuración. :::
::: nota
Si el nombre del script no se cita, snmptrapd se negará a
comience con mensajes similares a estos:
Los modificadores de expresiones regulares "/l" y "/a" son mutuamente excluyentes en (eval 2) línea 1, al final de la línea
El modificador Regexp "/l" no puede aparecer dos veces en (eval 2) línea 1, al final de la línea
:::
Configuración de SNMPTT
En primer lugar, debe configurarse snmptrapd para usar SNMPTT.
Para obtener el mejor rendimiento, SNMPTT debe configurarse como un daemon usando snmptthandler-embedded para pasarle los traps. Consulte las instrucciones para configurar SNMPTT.
Cuando SNMPTT esté configurado para recibir los traps, configure snmptt.ini:
- habilite el uso del módulo Perl del paquete NET-SNMP:
net_snmp_perl_enable = 1
- registre los traps en el archivo de traps que será leído por Zabbix:
log_enable = 1
log_file = [TRAP FILE]
- establezca el formato de fecha y hora:
date_time_format = %Y-%m-%dT%H:%M:%S%z
El paquete "net-snmp-perl" fue eliminado en RHEL 8.0-8.2; se volvió a añadir en RHEL 8.3. Para más información, consulte los problemas conocidos.
Ahora dé formato a los traps para que Zabbix pueda reconocerlos (edite snmptt.conf):
- Cada instrucción FORMAT debe comenzar con "ZBXTRAP [address]", donde [address] 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 Device reinitialized (coldStart)
- Vea más información sobre el formato de los traps a continuación.
No use traps desconocidos: Zabbix no podrá reconocerlos.
Los traps desconocidos pueden gestionarse definiendo un evento general en snmptt.conf:
EVENT general .* "General event" Normal
Formato de captura SNMP
Todos los receptores de capturas Perl personalizados y la configuración de capturas SNMPTT deben formatee la trampa de la siguiente manera:
[marca de tiempo] [la trampa, parte 1] ZBXTRAP [dirección] [la trampa, parte 2]
dónde
- [timestamp] - la marca de tiempo en formato "%Y-%m-%dT%H:%M:%S%z"
- ZBXTRAP - encabezado que indica que una nueva trampa comienza en esta línea
- [dirección] - Dirección IP utilizada para encontrar el host para esta trampa
Tenga en cuenta que "ZBXTRAP" y "[dirección]" se eliminarán del mensaje. durante el procesamiento. Si la trampa tiene otro formato, Zabbix podría analizar las trampas inesperadamente.
Trampa de ejemplo:
2024-01-11T15:28:47+0200 .1.3.6.1.6.3.1.1.5.3 Localhost normal de "Eventos de estado" - ZBXTRAP 192.168.1.1 Enlace inactivo en la interfaz 2. Estado de administrador: 1. Estado operativo: 2
Esto dará como resultado la siguiente trampa 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 "Eventos de estado" normales
localhost - Enlace inactivo en la interfaz 2. Estado de administración: 1. Estado operativo: 2
Requisitos del sistema
Se recomienda instalar archivos MIB para garantizar que los valores de los elementos 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.
Compatibilidad con archivos grandes
Zabbix tiene "soporte de archivos grandes" para archivos de captura SNMP. 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 en el 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:
- Zabbix abre el archivo de traps en la última ubicación conocida y pasa al paso 3.
- Zabbix comprueba si el archivo actualmente abierto ha sido rotado comparando el número de inode con el número de inode definido para el archivo de traps. Si no hay ningún archivo abierto, Zabbix restablece la última ubicación y vuelve al paso 1.
- Zabbix lee los datos del archivo actualmente abierto y establece la nueva ubicación.
- Los nuevos datos se analizan. Si este era el archivo rotado, el archivo se cierra y vuelve al paso 2.
- Si no había datos nuevos, Zabbix duerme durante 1 segundo y vuelve al paso 2.
Sistema de archivos
Debido a la implementación del archivo trampa, Zabbix necesita que el sistema de archivos soportar inodos para diferenciar archivos (la información es adquirida por un llamada stat()).
Ejemplos de configuración usando diferentes versiones del protocolo SNMP
Este ejemplo utiliza snmptrapd y un script receptor en Bash para pasar traps al server de Zabbix.
Configuración:
- Configure Zabbix para iniciar el SNMP trapper y
establecer el archivo de traps. Añada a
zabbix_server.conf:
StartSNMPTrapper=1
SNMPTrapperFile=/var/lib/zabbix/snmptraps/snmptraps.log
- 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/7.0/templates/scripts/snmptraps/zabbix_trap_handler.sh
Si es necesario, ajuste la variable ZABBIX_TRAPS_FILE en el script. Para usar el valor predeterminado, cree primero el directorio padre:
mkdir -p /var/lib/zabbix/snmptraps
- Añada lo siguiente a
snmptrapd.conf(consulte el ejemplo funcional)
traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
Puede que sea necesario reiniciar snmptrapd para que aplique los cambios en su configuración.
-
Cree un item SNMP TEST (tenga en cuenta los requisitos de configuración iniciales):
Type: SNMP trap
Type of information: Log
Host interface: SNMP 127.0.0.1
Key:snmptrap["linkUp"]
Log time format: yyyyMMdd.hhmmss
Tenga en cuenta que se utiliza el formato de fecha y hora ISO 8601.
- A continuación configuraremos
snmptrapdpara la versión del protocolo SNMP elegida y enviaremos traps de prueba usando la utilidadsnmptrap.
SNMPv1, SNMPv2
Los protocolos SNMPv1 y SNMPv2 se basan en autenticación mediante "community string". En el ejemplo siguiente usaremos "secret" como community string. Debe establecerse con el mismo valor en los remitentes de traps SNMP.
Tenga en cuenta que, aunque SNMPv2 sigue utilizándose ampliamente en entornos de producción, no ofrece ningún cifrado ni autenticación real del remitente. Los datos se envían en texto plano y, por lo tanto, estas versiones del protocolo solo deben utilizarse en entornos seguros, como una red privada, y nunca deben utilizarse a través de una red pública o de terceros.
Hoy en día, la versión 1 de SNMP realmente no se utiliza, ya que no admite 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 remitentes de traps SNMP:
authCommunity log,execute,net secret
A continuación podemos enviar un trap de prueba usando snmptrap. En este ejemplo usaremos el OID común "link up":
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 usar MD5 o varios métodos de autenticación SHA, y DES o varias opciones 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. Puede que tenga que recompilarlo con la opción
configure: --enable-blumenthal-aes.
Las versiones anteriores de net-snmp no admiten AES192/AES256.
Vea 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 del item 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