3 agente SNMP

Resumen

Es posible que desee utilizar la supervisión SNMP en dispositivos como impresoras, conmutadores de red, routers o UPS, que normalmente tienen SNMP habilitado y en los que sería poco práctico intentar instalar sistemas operativos completos y agentes de Zabbix.

Para poder recuperar los datos proporcionados por los agentes SNMP en estos dispositivos, el server de Zabbix debe configurarse inicialmente con compatibilidad SNMP, especificando la opción --with-net-snmp. Se recomienda también instalar archivos MIB para garantizar que los valores de los item 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.

Las comprobaciones SNMP se realizan únicamente sobre el protocolo UDP.

Los demonios de Zabbix server y proxy registran líneas similares a la siguiente si reciben una respuesta SNMP incorrecta:

SNMP response from host "gateway" does not contain all of the requested variable bindings

Aunque no cubren todos los casos problemáticos, son útiles para identificar dispositivos SNMP individuales para los que deben deshabilitarse las solicitudes combinadas.

Zabbix server/proxy reintentará hasta 5 veces (desde Zabbix 7.0.14) los item SNMP walk y get. El mecanismo de reintento no se aplica a los fallos de resolución DNS.

Para las comprobaciones SNMP heredadas (OID único numérico o cadena), Zabbix server/proxy reintentará al menos una vez después de un intento de consulta fallido: ya sea mediante el mecanismo de reintento de la biblioteca SNMP o mediante el mecanismo interno de procesamiento combinado.

Si supervisa dispositivos SNMPv3, asegúrese de que msgAuthoritativeEngineID (también conocido como snmpEngineID o "Engine ID") nunca se comparta entre dos dispositivos. Según RFC 2571 (sección 3.1.1.1), debe ser único para cada dispositivo.

RFC3414 exige que los dispositivos SNMPv3 conserven de forma persistente sus engineBoots. Algunos dispositivos no lo hacen, lo que provoca que sus mensajes SNMP se descarten como obsoletos después de reiniciarse. En tal situación, es necesario borrar manualmente la caché SNMP en un server/proxy (mediante -R snmp_cache_reload) o reiniciar el server/proxy.

Configuración de la monitorización SNMP

Para comenzar a monitorizar un dispositivo a través de SNMP, deben realizarse los siguientes pasos:

Paso 1

Averigüe la cadena SNMP (u OID) del elemento que desea monitorizar.

Para obtener una lista de cadenas SNMP, utilice el comando snmpwalk (parte del software net-snmp que debería haber instalado como parte de la instalación de Zabbix) o una herramienta equivalente:

snmpwalk -v 2c -c public <IP del host> .

Como '2c' aquí representa la versión SNMP, también puede sustituirlo por '1', para indicar la Versión 1 de SNMP en el dispositivo.

Esto debería proporcionarle una lista de cadenas SNMP y su último valor. Si no es así, es posible que la 'comunidad' SNMP sea diferente de la estándar 'public', en cuyo caso deberá averiguar cuál es.

A continuación, puede revisar la lista hasta encontrar la cadena que desea monitorizar, por ejemplo, si desea monitorizar los bytes que entran a su switch en el puerto 3, utilizaría la cadena IF-MIB::ifHCInOctets.3 de esta línea:

IF-MIB::ifHCInOctets.3 = Counter64: 3409739121

Ahora puede utilizar el comando snmpget para averiguar el OID numérico de 'IF-MIB::ifHCInOctets.3':

snmpget -v 2c -c public -On <IP del host> IF-MIB::ifHCInOctets.3

Tenga en cuenta que el último número de la cadena es el número de puerto que desea monitorizar. Consulte también: Índices dinámicos.

Esto debería devolverle algo como lo siguiente:

.1.3.6.1.2.1.31.1.1.1.6.3 = Counter64: 3472126941

De nuevo, el último número del OID es el número de puerto.

Algunos de los OID SNMP más utilizados son traducidos automáticamente a una representación numérica por Zabbix.

En el último ejemplo anterior, el tipo de valor es "Counter64", que internamente corresponde al tipo ASN_COUNTER64. La lista completa de tipos soportados es ASN_COUNTER, ASN_COUNTER64, ASN_UINTEGER, ASN_UNSIGNED64, ASN_INTEGER, ASN_INTEGER64, ASN_FLOAT, ASN_DOUBLE, ASN_TIMETICKS, ASN_GAUGE, ASN_IPADDRESS, ASN_OCTET_STR y ASN_OBJECT_ID. Estos tipos corresponden aproximadamente a "Counter32", "Counter64", "UInteger32", "INTEGER", "Float", "Double", "Timeticks", "Gauge32", "IpAddress", "OCTET STRING", "OBJECT IDENTIFIER" en la salida de snmpget, pero también pueden mostrarse como "STRING", "Hex-STRING", "OID" y otros, dependiendo de la presencia de una sugerencia de visualización.

Paso 2

Cree un host correspondiente a un dispositivo.

Añada una interfaz SNMP para el host:

  • Introduzca la dirección IP/nombre DNS y el número de puerto.
  • Seleccione la versión SNMP en el menú desplegable.
  • Añada las credenciales de la interfaz según la versión SNMP seleccionada:
    • SNMPv1 y v2 solo requieren la comunidad (normalmente 'public').
    • SNMPv3 requiere opciones más específicas (consulte más abajo).
  • Especifique el valor máximo de repetición (predeterminado: 10) para solicitudes bulk SNMP nativas (GetBulkRequest-PDUs); solo para items discovery[] y walk[] en SNMPv2 y v3. Tenga en cuenta que establecer este valor demasiado alto puede provocar el tiempo de espera de la comprobación del agent SNMP.
  • Marque la casilla Usar solicitudes combinadas para permitir el procesamiento combinado de solicitudes SNMP (no relacionado con las solicitudes bulk SNMP nativas "walk" y "get").
Parámetro SNMPv3 Descripción
Context name Introduzca el nombre de contexto para identificar el item en la subred SNMP.
Las macros de usuario se resuelven en este campo.
Security name Introduzca el nombre de seguridad.
Las macros de usuario se resuelven en este campo.
Security level Seleccione el nivel de seguridad:
noAuthNoPriv - no se usan protocolos de autenticación ni de privacidad
AuthNoPriv - se usa el protocolo de autenticación, pero no el de privacidad
AuthPriv - se usan ambos protocolos, autenticación y privacidad
Authentication protocol Seleccione el protocolo de autenticación - MD5, SHA1; con net-snmp 5.8 y versiones posteriores SHA224, SHA256, SHA384 o SHA512.
Authentication passphrase Introduzca la frase de contraseña de autenticación.
Las macros de usuario se resuelven en este campo.
Privacy protocol Seleccione el protocolo de privacidad - DES, AES128, AES192, AES256, AES192C (Cisco) o AES256C (Cisco).
Consulte las notas sobre la compatibilidad con el protocolo de privacidad
Privacy passphrase Introduzca la frase de contraseña de privacidad.
Las macros de usuario se resuelven en este campo.

En caso de credenciales SNMPv3 incorrectas (security name, authentication protocol/passphrase, privacy protocol):

  • Zabbix recibe un ERROR de net-snmp, excepto en el caso de una Privacy passphrase incorrecta, en cuyo caso Zabbix recibe un error TIMEOUT de net-snmp.
  • La disponibilidad de la interfaz SNMP cambiará a rojo (no disponible).

Los cambios en Authentication protocol, Authentication passphrase, Privacy protocol o Privacy passphrase, realizados sin cambiar el Security name, normalmente se aplican automáticamente cuando la interfaz SNMPv3 correspondiente se actualiza en Zabbix. En los casos en que también se cambie el Security name, todos los parámetros se actualizarán inmediatamente.

Puede usar una de las templates SNMP proporcionadas, que añadirá automáticamente un conjunto de items. Antes de usar una template, verifique que sea compatible con el host.

Haga clic en Add para guardar el host.

Compatibilidad con el protocolo de privacidad

Dependiendo de su sistema operativo y de la configuración de net-snmp, es posible que algunos protocolos de privacidad no estén disponibles:

  • En algunos sistemas operativos más recientes (por ejemplo, RHEL9), se elimina la compatibilidad con DES para el paquete net-snmp.

  • Los protocolos de cifrado AES192 y superiores no son compatibles de forma predeterminada en sistemas operativos anteriores a RHEL 8, CentOS 8, Oracle Linux 8, Debian 12, Ubuntu LTS 22.04, openSUSE Leap 15.5.

Para comprobar si la biblioteca net-snmp admite AES192+, use una de las siguientes opciones:

  1. net-snmp-config:
net-snmp-config --configure-options

Si la salida contiene --enable-blumenthal-aes, AES192+ es compatible.

Tenga en cuenta que net-snmp-config forma parte del paquete de desarrollo para SNMP (libsnmp-dev para Debian/Ubuntu, net-snmp-devel para CentOS/RHEL/OL/SUSE) y puede que no esté instalado de forma predeterminada.

  1. snmpget:
snmpget -v 3 -x AES-256

Si la salida contiene Invalid privacy protocol specified after -3x flag: AES-256, AES192+ no es compatible. Si la salida contiene No hostname specified., AES192+ no es compatible.

Si su biblioteca net-snmp no admite los protocolos AES192 y superiores, vuelva a compilar net-snmp con la opción --enable-blumenthal-aes y, a continuación, vuelva a compilar Zabbix server especificando la opción --with-net-snmp=/home/user/yourcustomnetsnmp/bin/net-snmp-config.

Paso 3

Cree un item para la supervisión.

Ahora, vuelva a Zabbix y haga clic en Items para el host SNMP que creó anteriormente. Dependiendo de si utilizó o no un template al crear su host, tendrá una lista de items SNMP asociados con su host o simplemente una lista vacía. Trabajaremos suponiendo que va a crear el item usted mismo usando la información que acaba de recopilar con snmpwalk y snmpget, así que haga clic en Create item.

Rellene los parámetros obligatorios en el nuevo formulario de item:

Parameter Description
Name Introduzca el nombre del item.
Type Seleccione SNMP agent aquí.
Key Introduzca la key con algo significativo.
Host interface Asegúrese de seleccionar la interfaz SNMP, por ejemplo, la de su switch/router.
SNMP OID Utilice uno de los formatos admitidos para introducir el/los valor(es) OID:

walk[OID1,OID2,...] - recupera un subárbol de valores.
Por ejemplo: walk[1.3.6.1.2.1.2.2.1.2,1.3.6.1.2.1.2.2.1.3].
Esta opción utiliza solicitudes SNMP bulk nativas (GetBulkRequest-PDUs) de forma asíncrona.
Los ajustes de tiempo de espera para este item se pueden establecer en el formulario de configuración del item. Considere establecer un valor de tiempo de espera bajo para evitar largas demoras si el dispositivo no está accesible, ya que se realizarán hasta 5 reintentos (desde Zabbix 7.0.14) si los anteriores agotan el tiempo de espera o fallan (por ejemplo, un tiempo de espera de 3 segundos puede resultar en un tiempo de espera de 15 segundos).
Puede usar esto como item maestro, con items dependientes que extraen datos del item maestro mediante preprocesamiento.
Es posible especificar varios OID en un solo snmp walk, como walk[OID1,OID2,...], para procesar de forma asíncrona un OID a la vez.
Si la solicitud bulk no devuelve resultados, entonces se intenta recuperar un único registro sin solicitud bulk.
Se admiten nombres MIB como parámetros; por lo tanto, walk[1.3.6.1.2.1.2.2.1.2] y walk[ifDescr] devolverán la misma salida.
Si se especifican varios OID/MIB, es decir, walk[ifDescr,ifType,ifPhysAddress], entonces la salida es una lista concatenada.
Las solicitudes GetBulk se usan con interfaces SNMPv2 y v3, y GetNext con interfaces SNMPv1; las repeticiones máximas para solicitudes bulk se configuran a nivel de interfaz.
El parámetro de repeticiones máximas afecta a las solicitudes bulk al determinar el número máximo de OID devueltos en una sola respuesta bulk.
Un valor más alto produce respuestas bulk más grandes, reduciendo el número de transmisiones necesarias. Sin embargo, no todos los dispositivos podrían admitir valores muy altos, lo que podría causar problemas.
Este item devuelve la salida de la utilidad snmpwalk con los parámetros -Oe -Ot -On.
Puede usar este item como item maestro en descubrimiento SNMP.

get[OID] - recupera un valor único de forma asíncrona.
Por ejemplo: get[1.3.6.1.2.1.31.1.1.1.6.3]
Los ajustes de tiempo de espera para este item se pueden establecer en el formulario de configuración del item. Considere establecer un valor de tiempo de espera bajo para evitar largas demoras si el dispositivo no está accesible, ya que se realizarán hasta 5 reintentos (desde Zabbix 7.0.14) si los anteriores agotan el tiempo de espera o fallan (por ejemplo, un tiempo de espera de 3 segundos puede resultar en un tiempo de espera de 15 segundos).

OID - (heredado) introduzca un único OID textual o numérico para recuperar un único valor de forma síncrona, opcionalmente combinado con otros valores.
Por ejemplo: 1.3.6.1.2.1.31.1.1.1.6.3.
Para esta opción, el tiempo de espera de comprobación del item será igual al valor establecido en el archivo de configuración del server.

Se recomienda usar items walk[OID] y get[OID] para un mejor rendimiento. Todos los items walk[OID] y get[OID] se ejecutan de forma asíncrona: no es necesario recibir la respuesta de una solicitud antes de iniciar otras comprobaciones. La resolución DNS también es asíncrona.
La concurrencia máxima de las comprobaciones asíncronas es 1000 (definida por MaxConcurrentChecksPerPoller). El número de pollers SNMP asíncronos está definido por el parámetro StartSNMPPollers.

Tenga en cuenta que, para las estadísticas de tráfico de red devueltas por cualquiera de los métodos, debe añadirse un paso Change per second en la pestaña Preprocessing; de lo contrario, obtendrá el valor acumulado del dispositivo SNMP en lugar del último cambio.

Todos los campos de entrada obligatorios están marcados con un asterisco rojo.

Ahora guarde el item y vaya a Monitoring > Latest data para sus datos SNMP.

Ejemplo 1

Ejemplo general:

Parámetro Descripción
OID 1.2.3.45.6.7.8.0 (o .1.2.3.45.6.7.8.0)
Clave <Cadena única que se utilizará como referencia para disparadores>
Por ejemplo, "mi_param".

Tenga en cuenta que el OID puede darse en forma numérica o de cadena. Sin embargo, en algunos casos, el OID de cadena debe convertirse a representación numérica. Se puede utilizar la utilidad snmpget para este propósito:

snmpget -On localhost public enterprises.ucdavis.memory.memTotalSwap.0

Ejemplo 2

Supervisión del tiempo de actividad:

Parámetro Descripción
OID MIB::sysUpTime.0
Clave router.uptime
Tipo de valor Float
Unidades uptime
Paso de preprocesamiento: Multiplicador personalizado 0.01

Solicitudes SNMP bulk nativas

El item walk[OID1,OID2,...] permite usar la funcionalidad SNMP nativa para solicitudes bulk (GetBulkRequest-PDUs), disponible en las versiones SNMP 2/3.

Una solicitud GetBulk en SNMP ejecuta múltiples solicitudes GetNext y devuelve el resultado en una sola respuesta. Esto puede utilizarse tanto para items SNMP normales como para el descubrimiento SNMP, con el fin de minimizar los viajes de ida y vuelta de red.

El item SNMP walk[OID1,OID2,...] puede utilizarse como item maestro que recopila datos en una sola solicitud con items dependientes que analizan la respuesta según sea necesario mediante preprocesamiento.

Tenga en cuenta que el uso de solicitudes SNMP bulk nativas no está relacionado con la opción de combinar solicitudes SNMP, que es la forma propia de Zabbix de combinar múltiples solicitudes SNMP (consulte la siguiente sección).

Se realizarán hasta cinco reintentos (desde Zabbix 7.0.14) para los items SNMP bulk, para evitar fallos si se pierde uno de los paquetes. El tiempo de espera para los items SNMP con get y walk (configurado en el formulario de configuración del item) se establece para toda la sesión. El tiempo de espera se aplica independientemente de si los datos se recuperan por completo; si los datos se reciben parcialmente (por ejemplo, si solo se recopilan correctamente datos de uno de varios OID), entonces el item pasa a no ser compatible con el mensaje "Only partial data received". Si se alcanza el tiempo de espera, se realizará un reintento, el tiempo de espera se restablecerá y se reenviará la última solicitud, lo que permitirá continuar la sesión desde la última solicitud si se pierde un único paquete o llega demasiado tarde. Considere establecer un valor bajo de tiempo de espera para evitar largas demoras si el dispositivo no está disponible, ya que se realizarán hasta 5 reintentos si los anteriores agotan el tiempo de espera o fallan (por ejemplo, un tiempo de espera de 3 segundos puede resultar en un tiempo de espera total de 15 segundos).

Funcionamiento interno del procesamiento combinado

Zabbix server y proxy pueden consultar dispositivos SNMP para múltiples valores en una sola solicitud. Esto afecta a varios tipos de items SNMP:

Todos los items SNMP en una sola interfaz con parámetros idénticos se programan para consultarse al mismo tiempo. Los dos primeros tipos de items son tomados por los pollers en lotes de como máximo 128 items, mientras que las reglas de descubrimiento de bajo nivel se procesan individualmente, como antes.

A nivel inferior, hay dos tipos de operaciones que se realizan para consultar valores: obtener múltiples objetos especificados y recorrer un árbol OID.

Para "getting", se usa un GetRequest-PDU con como máximo 128 enlaces de variables. Para "walking", se usa un GetNextRequest-PDU para SNMPv1 y se usa GetBulkRequest con el campo "max-repetitions" de como máximo 128 para SNMPv2 y SNMPv3.

Así, los beneficios del procesamiento combinado para cada tipo de item SNMP se describen a continuación:

  • los items SNMP normales se benefician de las mejoras de "getting";
  • los items SNMP con índices dinámicos se benefician tanto de las mejoras de "getting" como de "walking": "getting" se usa para la verificación de índices y "walking" para construir la caché;
  • las reglas de descubrimiento de bajo nivel SNMP se benefician de las mejoras de "walking".

Sin embargo, existe un problema técnico: no todos los dispositivos son capaces de devolver 128 valores por solicitud. Algunos siempre devuelven una respuesta correcta, pero otros responden con un error "tooBig(1)" o no responden en absoluto una vez que la posible respuesta supera cierto límite.

Para encontrar un número óptimo de objetos que consultar para un dispositivo dado, Zabbix utiliza la siguiente estrategia. Comienza con cautela consultando 1 valor en una solicitud. Si eso tiene éxito, consulta 2 valores en una solicitud. Si vuelve a tener éxito, consulta 3 valores en una solicitud y continúa de forma similar multiplicando por 1.5 el número de objetos consultados, lo que da como resultado la siguiente secuencia de tamaños de solicitud: 1, 2, 3, 4, 6, 9, 13, 19, 28, 42, 63, 94, 128.

Sin embargo, una vez que un dispositivo se niega a devolver una respuesta correcta (por ejemplo, para 42 variables), Zabbix hace dos cosas.

Primero, para el lote de items actual, reduce a la mitad el número de objetos en una sola solicitud y consulta 21 variables. Si el dispositivo está activo, entonces la consulta debería funcionar en la gran mayoría de los casos, porque 28 variables ya se sabía que funcionaban y 21 es significativamente menor que eso. Sin embargo, si eso también falla, entonces Zabbix recurre a consultar los valores uno por uno. Si aun así falla en este punto, entonces el dispositivo definitivamente no responde y el tamaño de la solicitud no es el problema.

La segunda cosa que Zabbix hace para los lotes de items posteriores es comenzar con el último número de variables que funcionó correctamente (28 en nuestro ejemplo) y seguir incrementando los tamaños de solicitud en 1 hasta alcanzar el límite. Por ejemplo, suponiendo que el tamaño máximo de respuesta es de 32 variables, las solicitudes posteriores tendrán tamaños de 29, 30, 31, 32 y 33. La última solicitud fallará y Zabbix nunca volverá a emitir una solicitud de tamaño 33. A partir de ese momento, Zabbix consultará como máximo 32 variables para este dispositivo.

Si las consultas grandes fallan con este número de variables, puede significar una de dos cosas. No se pueden conocer los criterios exactos que usa un dispositivo para limitar el tamaño de la respuesta, pero intentamos aproximarlo usando el número de variables. Así que la primera posibilidad es que este número de variables esté cerca del límite real de tamaño de respuesta del dispositivo en el caso general: a veces la respuesta es menor que el límite y a veces es mayor que él. La segunda posibilidad es que simplemente se haya perdido un paquete UDP en cualquiera de las dos direcciones. Por estas razones, si Zabbix obtiene una consulta fallida, reduce el número máximo de variables para intentar entrar más profundamente en el rango cómodo del dispositivo, pero solo hasta dos veces.

En el ejemplo anterior, si una consulta con 32 variables falla, Zabbix reducirá el recuento a 31. Si eso también falla, Zabbix reducirá el recuento a 30. Sin embargo, Zabbix no reducirá el recuento por debajo de 30, porque asumirá que los fallos posteriores se deben a la pérdida de paquetes UDP, y no al límite del dispositivo.

Si, no obstante, un dispositivo no puede manejar correctamente las solicitudes combinadas por otros motivos y la heurística descrita arriba no funciona, existe una opción "Use combined requests" para cada interfaz que permite desactivar las solicitudes combinadas para ese dispositivo.

Si las solicitudes combinadas provocan respuestas parciales o mal formadas que dan lugar a cálculos incorrectos por segundo (delta) (por ejemplo, picos aparentes en los contadores de la interfaz), desactive Use combined requests para la interfaz afectada para forzar consultas separadas por item; esto a menudo evita picos falsos. Como alternativa, considere usar items asíncronos get[] o walk[], que se ejecutan de forma asíncrona y no están sujetos al agrupamiento por interfaz de Use combined requests; pueden usarse en lugar de las comprobaciones OID síncronas heredadas para evitar problemas relacionados con las solicitudes combinadas. Busque entradas de registro del server/proxy similares a la mostrada en la sección Overview para ayudar a identificar los dispositivos afectados.

Además, si la interfaz se vuelve no disponible con frecuencia, puede ser necesario aumentar el parámetro UnavailableDelay en los archivos de configuración de Zabbix server o Zabbix proxy para reducir la frecuencia de las solicitudes. Los items pueden pasar a no compatibles si se reciben datos parciales durante el descubrimiento o los recorridos OID.