3 agente SNMP
Resumen
Es posible que desee utilizar monitorización SNMP en dispositivos como impresoras, switches de red, routers o UPS, que normalmente tienen SNMP habilitado y en los que sería poco práctico intentar configurar sistemas operativos completos y agents de Zabbix.
Para poder recuperar los datos proporcionados por los agents SNMP en estos dispositivos, el server de Zabbix debe estar configurado inicialmente con soporte SNMP especificando la opción --with-net-snmp.
También se recomienda instalar archivos MIB para garantizar que los valores de los items 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 a través del protocolo UDP.
Los daemons de server y proxy de Zabbix 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.
El server/proxy de Zabbix reintentará hasta 5 veces para los items SNMP walk y get.
El mecanismo de reintento no se aplica a fallos de resolución DNS.
Para las comprobaciones SNMP heredadas (un único número OID o cadena), el server/proxy de Zabbix 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 monitoriza dispositivos SNMPv3, asegúrese de que msgAuthoritativeEngineID (también conocido como snmpEngineID o "Engine ID") nunca sea compartido por dos dispositivos. Según RFC 2571 (sección 3.1.1.1), debe ser único para cada dispositivo.
RFC3414 requiere que los dispositivos SNMPv3 conserven su 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, la caché SNMP debe borrarse manualmente en un server/proxy (usando -R snmp_cache_reload) o debe reiniciarse el server/proxy.
Zabbix almacena en caché las asignaciones de SNMPv3 EngineID → IP y reutiliza los EngineID almacenados en caché para comprobaciones posteriores en lugar de enviar una sonda cada vez, reduciendo el tráfico de red. Si un EngineID no puede reutilizarse, se realizará un reintento con una sonda para descubrir el nuevo EngineID.
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
Crear 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 la lista desplegable.
- Añada las credenciales de la interfaz según la versión SNMP seleccionada:
- SNMPv1, v2 requieren solo la comunidad (normalmente 'public').
- SNMPv3 requiere opciones más específicas (véase más abajo).
- Especifique el valor máximo de repetición (predeterminado: 10) para solicitudes SNMP bulk nativas (GetBulkRequest-PDUs); solo para items
discovery[]ywalk[]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 SNMP bulk nativas "walk" y "get").
| Parámetro SNMPv3 | Descripción |
|---|---|
| Nombre de contexto | Introduzca el nombre de contexto para identificar el item en la subred SNMP. Las macros de usuario se resuelven en este campo. |
| Nombre de seguridad | Introduzca el nombre de seguridad. Las macros de usuario se resuelven en este campo. |
| Nivel de seguridad | 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 |
| Protocolo de autenticación | Seleccione el protocolo de autenticación - MD5, SHA1; con net-snmp 5.8 y versiones posteriores SHA224, SHA256, SHA384 o SHA512. |
| Frase de contraseña de autenticación | Introduzca la frase de contraseña de autenticación. Las macros de usuario se resuelven en este campo. |
| Protocolo de privacidad | 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 |
| Frase de contraseña de privacidad | Introduzca la frase de contraseña de privacidad. Las macros de usuario se resuelven en este campo. |
En caso de credenciales SNMPv3 incorrectas (nombre de seguridad, protocolo/frase de contraseña de autenticación, protocolo de privacidad):
- Zabbix recibe un ERROR de net-snmp, excepto en el caso de una Frase de contraseña de privacidad 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 Protocolo de autenticación, Frase de contraseña de autenticación, Protocolo de privacidad o Frase de contraseña de privacidad, realizados sin cambiar el Nombre de seguridad, normalmente se aplican automáticamente cuando la interfaz SNMPv3 correspondiente se actualiza en Zabbix. En los casos en que también se cambie el Nombre de seguridad, todos los parámetros se actualizarán de inmediato.
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 protocolos de privacidad
Dependiendo de su sistema operativo y 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 ha eliminado 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+, utilice una de las siguientes opciones:
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 por defecto.
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, luego vuelva a compilar el servidor Zabbix 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 una template al crear su host, tendrá una lista de items SNMP asociados con su host o solo 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 | Use uno de los formatos admitidos para introducir valores 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 native SNMP bulk requests (GetBulkRequest-PDUs) de forma asíncrona. Los ajustes de timeout para este item se pueden definir en el formulario de item configuration. Considere establecer un valor de timeout bajo para evitar largas demoras si el dispositivo no está accesible, ya que se realizarán hasta 5 reintentos si los anteriores expiran o fallan (por ejemplo, un timeout de 3 segundos puede resultar en un tiempo de espera de 15 segundos). Puede usar esto como el master item, con dependent items que extraigan datos del master mediante preprocessing. Es posible especificar varios OIDs 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 OIDs/MIBs, es decir, walk[ifDescr,ifType,ifPhysAddress], la salida será una lista concatenada.Las solicitudes GetBulk se usan con interfaces SNMPv2 y v3 y GetNext con interfaces SNMPv1; las repeticiones máximas para las 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 OIDs devueltos en una sola respuesta bulk. Un valor más alto da como resultado respuestas bulk más grandes, lo que reduce 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 master item en SNMP discovery. 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 timeout para este item se pueden definir en el formulario de item configuration. Considere establecer un valor de timeout bajo para evitar largas demoras si el dispositivo no está accesible, ya que se realizarán hasta 5 reintentos si los anteriores expiran o fallan (por ejemplo, un timeout 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 solo 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 timeout de comprobación del item será igual al valor establecido en el archivo de configuration file 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 se define mediante 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 de 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 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 nativas SNMP bulk
El walk[OID1,OID2,...] item permite utilizar la funcionalidad nativa de SNMP para solicitudes bulk (GetBulkRequest-PDUs), disponible en las versiones 2/3 de SNMP.
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 regulares como para el descubrimiento SNMP para minimizar los viajes de ida y vuelta en la red.
El item SNMP walk[OID1,OID2,...] puede utilizarse como el item maestro que recopila datos en una sola solicitud con items dependientes que analizan la respuesta según sea necesario utilizando preprocesamiento.
Tenga en cuenta que el uso de solicitudes nativas SNMP bulk no está relacionado con la opción de combinar solicitudes SNMP, que es la propia forma de Zabbix de combinar múltiples solicitudes SNMP (ver la siguiente sección).
Se realizarán hasta cinco reintentos 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 (establecido 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 completamente; si los datos se reciben parcialmente (por ejemplo, los datos se recopilan correctamente solo para uno de varios OID), entonces el item se vuelve no soportado con el mensaje "Only partial data received".
Si se alcanza el tiempo de espera, se producirá un reintento, el tiempo de espera se restablecerá y la última solicitud se reenviará, lo que permitirá continuar la sesión desde la última solicitud si se pierde un solo paquete o llega demasiado tarde.
Considere establecer un valor de tiempo de espera bajo para evitar largos retrasos si el dispositivo no es accesible, 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 de 15 segundos).
Funcionamiento interno del procesamiento combinado
El server y el proxy de Zabbix pueden consultar dispositivos SNMP para obtener varios valores en una sola solicitud. Esto afecta a varios tipos de items SNMP:
- items SNMP normales
- items SNMP con índices dinámicos
- reglas de descubrimiento de bajo nivel 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 hasta 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 varios objetos especificados y recorrer un árbol OID.
Para "getting", se usa un GetRequest-PDU con un máximo de 128 enlaces de variables. Para "walking", se usa un GetNextRequest-PDU para SNMPv1 y se usa GetBulkRequest con el campo "max-repetitions" de hasta 128 para SNMPv2 y SNMPv3.
Por lo tanto, a continuación se describen los beneficios del procesamiento combinado para cada tipo de item SNMP:
- 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 respuesta potencial supera cierto límite.
Para encontrar un número óptimo de objetos a 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 se sabía que 28 variables 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 en ese punto sigue fallando, 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 el tamaño de las solicitudes 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 aproximarlos mediante el número de variables. Por lo tanto, la primera posibilidad es que este número de variables esté aproximadamente en el 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 anteriormente no funciona, existe una opción "Use combined requests" para cada interfaz que permite deshabilitar 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), deshabilite 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 log 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 del Zabbix server o del 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.