Recibir capturas SNMP es lo opuesto a consultar dispositivos habilitados para SNMP.
En este caso, la información se envía desde un dispositivo habilitado para SNMP y se recoge o "captura" por Zabbix.
Por lo general, las capturas 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 capturas puede detectar algunos problemas cortos que ocurren durante el intervalo de consulta y pueden ser pasados por alto por los datos de consulta.
La recepción de capturas SNMP en Zabbix está diseñada para funcionar con snmptrapd y uno de los mecanismos para pasar las capturas a Zabbix - ya sea un script Bash o Perl o SNMPTT.
La forma más sencilla de configurar el monitoreo de capturas después de configurar Zabbix es utilizar la solución de script Bash, porque Perl y SNMPTT suelen faltar 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 script con la opción do perl
o SNMPTT).
El flujo de trabajo de recibir una captura:
snmptrapd
recibe una capturasnmptrapd
pasa la captura al script del receptor (Bash, Perl) o SNMPTTsnmptrap[expresión regular]
. La captura se establece como el valor de todas las métricas coincidentes. Si no se encuentra ninguna métrica coincidente y hay una métrica snmptrap.fallback
, la captura se establece como el valor de esa.During high-availability (HA) node switch, Zabbix will continue processing after the last record within the last ISO 8601 timestamp; if the same record is not found then only the timestamp will be used to identify last position.
Configurar en la interfaz los siguientes campos específicos para este tipo de métrica:
En Recopilación de datos → Equipos, en el campo Interfaz de equipo establezca una interfaz SNMP con la dirección IP o DNS correcta. La dirección de cada captura recibida se compara con las direcciones IP y DNS de todos los interfaces SNMP para encontrar los equipos correspondientes.
En el campo Clave utilice una de las claves de captura SNMP:
Clave | ||
---|---|---|
Descripción | Valor de retorno | Comentarios |
snmptrap[regexp] | ||
Captura todas las capturas SNMP que coinciden con la expresión regular especificada en regexp. Si no se especifica la expresión regular, detecta cualquier trampa. | Trampa SNMP | Este elemento solo se puede configurar para interfaces SNMP. Las macros de usuario y las expresiones regulares globales se admiten en el parámetro de esta clave de elemento. |
snmptrap.fallback | ||
Captura todas las capturas SNMP que no fueron capturadas por ninguno de los elementos snmptrap[] para esa interfaz. | Trampa SNMP | Este elemento solo se puede configurar para interfaces SNMP. |
En este 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. Tenga en cuenta que también se aceptan otros formatos como "Numérico" pero puede requerir un controlador de capturas personalizado.
Para que funcione la supervisión de capturas SNMP, primero se debe configurar correctamente (ver más abajo).
Para leer las capturas, el servidor Zabbix o el proxy deben estar configurados para iniciar el proceso de captura SNMP y apuntar al archivo de captura que se está escribiendo por SNMPTT o un receptor de captura Bash/Perl. Para hacer eso, 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: sólo snmptrapd.
Un receptor de capturas Bash [script] (https://raw.githubusercontent.com/zabbix/zabbix-docker/6.4/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh) se puede utilizar para pasar capturas al servidor Zabbix directamente desde snmptrapd. Para configurarlo, agregue la opción traphandle
al archivo de configuración de snmptrapd (snmptrapd.conf
), consulte el [ejemplo] (https://raw.githubusercontent.com/zabbix/zabbix-docker/6.4/Dockerfiles/snmptraps/alpine/conf/etc/snmp/snmptrapd.conf).
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 capturas. Ver instrucciones para [configurar SNMPTT] (http://snmptt.sourceforge.net/docs/snmptt.shtml).
Cuando SNMPTT esté configurado para recibir las capturas, configure snmptt.ini
:
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 los problemas conocidos.
Ahora formatee las capturas para que Zabbix las reconozca (edite snmptt.conf):
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal
FORMAT ZBXTRAP $aA Device reinitialized (coldStart)
No utilice capturas desconocidas: Zabbix no podrá reconocerlas. Las capturas desconocidas se pueden manejar definiendo un evento general en snmptt.conf:
Requisitos: Perl, Net-SNMP compilado con --enable-embedded-perl (hecho por defecto desde Net-SNMP 5.4)
Un receptor de capturas Perl (busque misc/snmptrap/zabbix_trap_receiver.pl) se puede utilizar para pasar capturas al servidor Zabbix directamente desde snmptrapd. Para configurarlo:
Si el nombre del script no se cita, snmptrapd se negará a comenzar con mensajes similares a estos:
Todos los receptores de capturas Perl personalizados y la configuración de capturas SNMPTT deben formatear la captura de la siguiente manera:
dónde
Tenga en cuenta que "ZBXTRAP" y "[dirección]" se eliminarán del mensaje. durante el procesamiento. Si la captura tiene otro formato, Zabbix podría analizar las capturas de forma no esperada.
Captura de ejemplo:
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
Esto dará como resultado la siguiente captura para la interfaz SNMP con 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. Operational state: 2
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 Bash para pasar capturas 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/6.4/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh
Si es necesario, ajuste la variable ZABBIX_TRAPS_FILE en el script. Para utilizar el valor predeterminado, cree el directorio principal primero:
snmtrapd.conf
(consulte el ejemplo de trabajo)Cree una métrica SNMP TEST:
IP de la interfaz SNMP del equipo: 127.0.0.1
Clave: snmptrap["linkup"]
Formato de hora de registro: yyyyMMdd.hhmmss
A continuación configuraremos snmptrapd
para la versión del protocolo SNMP elegida y enviaremos capturas de prueba utilizando la utilidad snmptrap
.
Los protocolos SNMPv1 y SNMPv2 se basan en la autenticación de "cadena comunitaria". En el siguiente ejemplo usaremos "secret" como cadena de comunidad. Debe establecerse en el mismo valor en los remitentes de capturas SNMP.
Tenga en cuenta que, si bien todavía se utiliza ampliamente en entornos de producción, SNMPv2 no ofrece ningún cifrado ni autenticación de remitente real. Los datos se envían como texto plano y por lo tanto estas versiones de protocolo solo deben usarse en entornos seguros, como redes privadas, y nunca debe utilizarse en ninguna red pública o de terceros.
La versión 1 de SNMP no se utiliza actualmente porque no admite contadores de 64 bits y se considera un protocolo obsoleto.
Para habilitar la aceptación de capturas SNMPv1 o SNMPv2, debe agregar la siguiente línea a snmptrapd.conf
. Reemplace "secret" con la cadena de comunidad SNMP configurada en los remitentes de capturas SNMP:
A continuación podemos enviar una captura de prueba usando snmptrap
. Usaremos el OID de "enlace" común en este ejemplo:
SNMPv3 aborda los problemas de seguridad de SNMPv1/v2 y proporciona autenticación y cifrado. Puede utilizar MD5 o varios métodos de autenticación SHA y DES/varios AES como cifrado.
Para habilitar la aceptación de SNMPv3, agregue 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 seguros como AES192 o AES256, utilice net-snmp a partir de la versión 5.8. Quizás tenga que recompilarlo con la opciónconfigure
: --enable-blumenthal-aes
. Las versiones anteriores de net-snmp no son compatibles con AES192/AES256. Véase también: http://www.net-snmp.org/wiki/index.php/Strong_Authentication_or_Encryption
En ambos ejemplos verá líneas similares en su /var/lib/zabbix/snmptraps/snmptraps.log
:
20220805.102235 ZBXTRAP 127.0.0.1
UDP: [127.0.0.1]:35736->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0
El valor de la métrica en Zabbix será:
2022-08-05 10:22:35 2022-08-05 10:22:33
20220805.102233 UDP: [127.0.0.1]:35736->[127.0.0.1]:162
DISMAN-EVENT-MIB::sysUpTimeInstance = 0:0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 = IF-MIB::linkUp.0