3 agente SNMP
Resumen
Es posible que desee utilizar la monitorizació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 Zabbix.
Para poder recuperar los datos proporcionados por los agentes SNMP en estos dispositivos, el server de Zabbix debe estar configurado inicialmente con soporte SNMP, especificando la opción --with-net-snmp.
Se recomienda también 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 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 items SNMP walk y get.
El mecanismo de reintento no se aplica a los fallos de resolución DNS.
Para las comprobaciones SNMP heredadas (número OID único 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 requiere 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, la caché SNMP debe limpiarse manualmente en un server/proxy (mediante -R snmp_cache_reload) o el server/proxy debe reiniciarse.
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
Descubra la cadena SNMP (o el OID) del item que desea supervisar.
Para obtener una lista de cadenas SNMP, use 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 <host IP> .
Como 2c aquí representa la versión de SNMP, también puede sustituirlo por 1, para indicar SNMP Version 1 en el dispositivo.
Esto debería devolverle una lista de cadenas SNMP y su último valor.
Si no es así, es posible que la "community" SNMP sea diferente de la estándar public, en cuyo caso deberá averiguar cuál es.
A continuación, puede recorrer la lista hasta encontrar la cadena que desea supervisar; por ejemplo,
si quisiera supervisar los bytes que entran en su switch por el puerto 3, usaría la cadena IF-MIB::ifHCInOctets.3 de esta línea:
IF-MIB::ifHCInOctets.3 = Counter64: 3409739121
Ahora puede usar el comando snmpget para averiguar el OID numérico de IF-MIB::ifHCInOctets.3:
snmpget -v 2c -c public -On <host IP> IF-MIB::ifHCInOctets.3
Tenga en cuenta que el último número de la cadena es el número de puerto que desea supervisar. Véase también: Dynamic indexes.
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 compatibles 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 indicación 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 requieren solo la comunidad (normalmente 'public').
- SNMPv3 requiere opciones más específicas; consulte SNMPv3.
- Especifique el valor máximo de repetición (predeterminado: 10) para solicitudes bulk SNMP 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 bulk SNMP nativas "walk" y "get").
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.
SNMPv3
Los siguientes parámetros son obligatorios para SNMPv3:
- 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 utilizan protocolos de autenticación ni de privacidad;
- AuthNoPriv - se utiliza el protocolo de autenticación, pero no el de privacidad;
- AuthPriv - se utilizan 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 cambia el Security name, todos los parámetros se actualizarán inmediatamente.
Compatibilidad con protocolos 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 se admiten de forma predeterminada en sistemas operativos anteriores a RHEL 8, CentOS 8, Oracle Linux 8, Debian 12, Ubuntu LTS 22.04 y openSUSE Leap 15.5.
Para comprobar si la biblioteca net-snmp admite AES192+, use 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 no estar instalado de forma predeterminada.
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 el server de Zabbix especificando la opción --with-net-snmp=/home/user/yourcustomnetsnmp/bin/net-snmp-config.
Paso 3
Crear un item para la supervisión.
Ahora, vuelve a Zabbix y haz clic en Items para el host SNMP que creaste anteriormente. Dependiendo de si utilizaste o no un template al crear tu host, tendrás una lista de items SNMP asociados con tu host o simplemente una lista vacía. Trabajaremos suponiendo que vas a crear el item tú mismo usando la información que acabas de recopilar con snmpwalk y snmpget, así que haz clic en Create item.
Rellena los parámetros obligatorios en el nuevo formulario de item:

| Parameter | Description |
|---|---|
| Name | Introduce el nombre del item. |
| Type | Selecciona SNMP agent aquí. |
| Key | Introduce la key con un nombre significativo. |
| Host interface | Asegúrate de seleccionar la interfaz SNMP, por ejemplo, la de tu switch/router. |
| SNMP OID | Usa 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 configuración del item. Considera establecer un valor de timeout bajo para evitar largas esperas si el dispositivo no está disponible, ya que se realizarán hasta 5 reintentos (desde Zabbix 7.0.14) si los anteriores agotan el tiempo o fallan (por ejemplo, un timeout de 3 segundos puede dar lugar a una espera de 15 segundos). Puedes usar esto como item maestro, con items dependientes que extraen datos del 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 cada vez.Si la solicitud bulk no devuelve resultados, 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], 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 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. Puedes usar este item como item maestro en SNMP discovery. get[OID] - recupera un único valor 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 configuración del item. Considera establecer un valor de timeout bajo para evitar largas esperas si el dispositivo no está disponible, ya que se realizarán hasta 5 reintentos (desde Zabbix 7.0.14) si los anteriores agotan el tiempo o fallan (por ejemplo, un timeout de 3 segundos puede dar lugar a una espera de 15 segundos). OID - (heredado) introduce 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 timeout 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 que comiencen 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. Ten en cuenta que, para las estadísticas de tráfico de red devueltas por cualquiera de los métodos, se debe añadir un paso de Change per second en la pestaña Preprocessing; de lo contrario, obtendrás el valor acumulado del dispositivo SNMP en lugar del último cambio. |
Todos los campos obligatorios están marcados con un asterisco rojo.
Ahora guarda el item y ve a Monitoring > Latest data para ver tus 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:
- 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 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.