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:
snmptrapd
recibe un trapsnmptrapd
pasa el trap al script receptor (Bash, Perl) o SNMPTTsnmptrap[regexp]
. El trap se establece como el valor de todos los ítems coincidentes. Si no se encuentra ningún ítem coincidente y existe un ítem snmptrap.fallback
, el trap se establece como el valor de este.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.
Este tipo de elemento requiere la siguiente configuración en la interfaz.
1. Crear una interfaz SNMP para su host
2. Configurar el elemento
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.
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):
Si se utiliza el parámetro systemd PrivateTmp, es poco probable que este archivo funcione en /tmp.
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.
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:
perl hacer "[RUTA COMPLETA AL SCRIPT DEL RECEPTOR PERL]";
Es posible que sea necesario reiniciar snmptrapd para detectar cambios en su configuración.
Si el nombre del script no se cita, snmptrapd se negará a comience con mensajes similares a estos:
Al principio, snmptrapd debe configurarse para utilizar SNMPTT.
Para obtener el mejor rendimiento, SNMPTT debe configurarse como un demonio que usa snmptthandler-embedded para pasarle las trampas. Ver instrucciones para [configurar SNMPTT] (http://snmptt.sourceforge.net/docs/snmptt.shtml).
Cuando SNMPTT esté configurado para recibir las capturas, configure snmptt.ini
:
::: nota de advertencia El paquete "net-snmp-perl" se eliminó en RHEL 8.0-8.2; Se volvió a agregar en RHEL 8.3. Para obtener más información, consulte el conocido problemas. :::
Ahora formatee las trampas para que Zabbix las reconozca (edite snmptt.conf):
EVENTO coldStart .1.3.6.1.6.3.1.1.5.1 "Eventos de estado" Normal
FORMAT ZBXTRAP $aA Dispositivo reinicializado (inicio en frío)
::: nota importante No utilices trampas desconocidas: Zabbix no podrá reconocerlas. Las trampas desconocidas se pueden manejar definiendo un evento general en snmptt.conf:
:::
Todos los receptores de capturas Perl personalizados y la configuración de capturas SNMPTT deben formatee la trampa de la siguiente manera:
dónde
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
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.
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.
Zabbix no proporciona ningún sistema de rotación de registros; eso debe manejarse por el usuario La rotación de registros primero debe cambiar el nombre del archivo antiguo y solo luego elimínelo para que no se pierdan trampas:
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()).
Este ejemplo utiliza snmptrapd y un script receptor en Bash para pasar traps al servidor Zabbix.
Configuración:
zabbix_server.conf
:/usr/sbin/zabbix_trap_handler.sh
:curl -o /usr/sbin/zabbix_trap_handler.sh https://raw.githubusercontent.com/zabbix/zabbix-docker/7.0/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:
snmtrapd.conf
(consulte el ejemplo funcional)Es posible que deba reiniciar snmptrapd para que recoja los cambios en su configuración.
Cree un ítem SNMP TEST (tenga en cuenta los requisitos de configuración iniciales):
Tipo: SNMP trap
Tipo de información: Log Interfaz del host: 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.
snmptrapd
para la versión del protocolo SNMP elegida y enviaremos traps de prueba utilizando la utilidad snmptrap
.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 solo deben usarse en entornos seguros, como redes privadas, y nunca deben usarse en redes públicas o de terceros.
La versión 1 de SNMP ya no se utiliza realmente hoy en día, 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 emisores de traps SNMP:
A continuación, podemos enviar un trap de prueba utilizando snmptrap
. Usaremos el OID común "link up" en este ejemplo:
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
:
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 admiten AES192/AES256. Consulte también: Strong Authentication or Encryption.
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 ítem 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