3 Capturador SNMP

Descripción general

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 a snmptrapd y el servidor Zabbix o el proxy Zabbix la recopila o la "atrapa" del archivo.

Por lo general, las trampas 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 agente lado que se utiliza para consultas). El uso de trampas puede detectar algunos cortos problemas que ocurren durante el intervalo de consulta y pueden ser pasados por alto por el 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 trampas a Zabbix - ya sea un script Bash o Perl o SNMPTT.

::: nota clásica La forma más sencilla de configurar el monitoreo de trampas después de configurar Zabbix es utilizar la solución de script Bash, porque Perl y SNMPTT suelen ser 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 obtener un mejor rendimiento en los 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 trampa:

  1. snmptrapd recibe una trampa
  2. snmptrapd pasa la trampa al script del receptor (Bash, Perl) o SNMPTT
  3. El receptor analiza, formatea y escribe la trampa en un archivo
  4. El capturador SNMP de Zabbix lee y analiza el archivo de captura
  5. Para cada trampa, Zabbix encuentra todos los elementos del "trampero SNMP" con el host. interfaces que coinciden con la dirección de captura recibida. Tenga en cuenta que sólo el La "IP" o "DNS" seleccionada en la interfaz del host se utiliza durante la pareo.
  6. Para cada elemento encontrado, la trampa se compara con la expresión regular en snmptrap[expresación regular]. La trampa se establece como el valor de todos artículos coincidentes. Si no se encuentra ningún elemento coincidente y hay un elemento snmptrap.fallback, la trampa se establece como el valor de ese.
  7. Si la trampa no se estableció como el valor de ningún elemento, Zabbix de forma predeterminada registra la trampa inigualable. (Esto se configura mediante "Registrar SNMP no coincidente trampas" 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 capturas SNMP

Configurar los siguientes campos en el frontend es específico para esto tipo de artículo:

  • Su host debe tener una interfaz SNMP

En Recopilación de datos → Hosts, en el campo Interfaz de host establezca un SNMP interfaz con la dirección IP o DNS correcta. La dirección de cada La captura recibida se compara con las direcciones IP y DNS de todos los SNMP. interfaces para encontrar los hosts correspondientes.

  • Configurar el elemento con tipo de captura SNMP

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.

::: nota clásica En este momento no se admite la coincidencia de expresiones regulares multilínea. tiempo. :::

Establezca el Tipo de información en 'Registro' para que se muestren las marcas de tiempo. analizado. Tenga en cuenta que también se aceptan otros formatos como "Numérico" pero puede requerir un controlador de trampas personalizado.

Para que funcione la supervisión de capturas SNMP, primero se debe configurar correctamente (ver más abajo).

1 Configuración de la supervisión de trampas SNMP

Configuración del servidor/proxy Zabbix

Para leer las trampas, el servidor Zabbix o el proxy deben estar configurados para iniciar el proceso de captura SNMP y apunte al archivo de captura que se está escrito 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):

IniciarSNMPTrapper=1
       SNMPTrapperFile=[ARCHIVO TRAMPA]

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

Configuración del receptor de trampas Bash

Requisitos: sólo snmptrapd.

Un receptor de trampa Bash [script] (https://raw.githubusercontent.com/zabbix/zabbix-docker/master/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh) se puede utilizar para pasar trampas al servidor Zabbix desde snmptrapd utilizando el archivo trapper. A configúrelo, agregue la opción traphandle al archivo de configuración snmptrapd (snmptrapd.conf), consulte [ejemplo] (https://raw.githubusercontent.com/zabbix/zabbix-docker/master/Dockerfiles/snmptraps/alpine/conf/etc/snmp/snmptrapd.conf).

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

Configuración de SNMPTT

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:

  1. habilite el uso del módulo Perl del paquete NET-SNMP:
net_snmp_perl_enable = 1
  1. registre las trampas en el archivo de trampas que Zabbix leerá:
log_enable = 1
       log_file = [ARCHIVO TRAMPA]
  1. establezca el formato de fecha y hora:
formato_fecha_hora = %Y-%m-%dT%H:%M:%S%z

::: 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):

  1. Cada instrucción FORMAT debe comenzar con "ZBXTRAP [dirección]", donde [dirección] se comparará con las direcciones IP y DNS de SNMP interfaces en Zabbix. P.ej.:
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)
  1. Vea más sobre el formato de captura SNMP a continuación.

::: nota importante No utilices trampas desconocidas: Zabbix no podrá reconocerlas. Las trampas desconocidas se pueden manejar definiendo un evento general en snmptt.conf:

EVENTO general .* "Evento general" Normal

:::

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]';

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:

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

2 Requisitos del sistema

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 registros

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:

  1. Zabbix abre el archivo de captura en la última ubicación conocida y va a paso 3
  2. Zabbix verifica si el archivo actualmente abierto ha sido rotado por comparando el número de inodo con el número de inodo del archivo trap definido. Si no hay ningún archivo abierto, Zabbix restablece la última ubicación y va al paso 1.
  3. Zabbix lee los datos del archivo abierto actualmente y establece el nueva ubicacion.
  4. Los nuevos datos se analizan. Si este fue el archivo girado, el archivo es cierra y vuelve al paso 2.
  5. Si no hubo 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 utilizando diferentes versiones del protocolo SNMP

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

Configuración:

  1. Configure Zabbix para iniciar SNMP Trapper y configure el archivo trampa. Agregar a zabbix_server.conf:
IniciarSNMPTrapper=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/7.0/Dockerfiles/snmptraps/alpine/conf/usr/sbin/zabbix_trap_handler.sh

Nota: Antes de la versión 7.0, utilice este enlace para descargar el script (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 utilizar el valor predeterminado, cree el directorio principal primero:

mkdir -p /var/lib/zabbix/snmptraps
  1. Agregue lo siguiente a snmtrapd.conf (consulte el [ejemplo] de trabajo(https://raw.githubusercontent.com/zabbix/zabbix-docker/master/Dockerfiles/snmptraps/alpine/conf/etc/snmp/snmptrapd .conf))
control de trampa predeterminado /bin/bash /usr/sbin/zabbix_trap_handler.sh

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

  1. Cree un elemento SNMP para fines de prueba:

    IP de la interfaz SNMP del host: 127.0.0.1
    Clave: snmptrap["linkUp"]
    Formato de hora de registro: aaaa-MM-ddThh:mm:ss

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

  1. A continuación configuraremos snmptrapd para nuestra versión de protocolo SNMP elegida y envíe trampas de prueba utilizando la utilidad snmptrap.
SNMPv1, SNMPv2

Los protocolos SNMPv1 y SNMPv2 se basan en la autenticación de "cadena comunitaria". En el siguiente ejemplo Usaremos "secreto" 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 cualquier cifrado y 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 heredado.

Para habilitar la aceptación de capturas SNMPv1 o SNMPv2, debe agregar la siguiente línea a snmptrapd.conf. Reemplace "secreto" con la cadena de comunidad SNMP configurada en los remitentes de capturas SNMP:

registro de authCommunity, ejecución, secreto de red

A continuación podemos enviar una trampa de prueba usando snmptrap. Usaremos el OID de "enlace" común en este ejemplo:

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

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:

createUser -e 0x8000000001020304 traptest SHA micontraseña AES
       registro de autor, ejecutar traptest

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

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

::: nota de advertencia 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 tengas que recompilarlo con configure opción: --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 :::

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 artículo 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
       INFORMACIÓN DE LA PDU:
         recibido de UDP: [127.0.0.1]:58649->[127.0.0.1]:162
         tipo de notificación TRAMPA
         versión 1
         publico comunitario
         estado de error 0
         ID de transacción 1
         ID solicitado 2101882550
         ID de mensaje 0
         índice de error 0
       VARBINDOS:
         DISMAN-EVENT-MIB::sysUpTimeTipo de instancia=67 valor=Timeticks: (457671) 1:16:16.71
         SNMPv2-MIB::snmpTrapOID.0 tipo=6 valor=OID: IF-MIB::linkUp.0

Ver también