Descubrimiento de OID de SNMP

Descripción general

En esta sección realizaremos un descubrimiento de bajo nivel en un dispositivo SNMP.

Este método de descubrimiento de OIDs SNMP es compatible desde Zabbix server/proxy 6.4.

Configuración de ejemplo

1. Cree un item de agente SNMP con una clave como:

walk[.1.3.6.1.4.1.9999.1.1.1.1]

Este item realiza un único recorrido de la tabla SNMP y devuelve todas las entradas de la tabla en una sola solicitud, en un formato que corresponde a la salida de la utilidad snmpwalk con las opciones de formato -Oe -Ot -On.

Devolverá el siguiente valor de texto multilínea:

.1.3.6.1.4.1.9999.1.1.1.1.1.1 = STRING: "Temperature Sensor"
.1.3.6.1.4.1.9999.1.1.1.1.2.1 = STRING: "temp"
.1.3.6.1.4.1.9999.1.1.1.1.3.1 = 100
.1.3.6.1.4.1.9999.1.1.1.1.1.2 = STRING: "Humidity Sensor"
.1.3.6.1.4.1.9999.1.1.1.1.2.2 = STRING: "humidity"
.1.3.6.1.4.1.9999.1.1.1.1.3.2 = 200

2. Cree una regla de descubrimiento:

  • En el campo Name, introduzca un nombre descriptivo para la regla de descubrimiento (por ejemplo, "Discover sensors").
  • En el campo Type, seleccione "Dependent item".
  • En el campo Key, introduzca una clave descriptiva (por ejemplo, "net.if.discovery").
  • En el campo Master item, seleccione "SNMP walk item".

3. En la pestaña Preprocessing, añada un paso de preprocesamiento con "SNMP walk to JSON" en la lista desplegable Name, con 3 parámetros:

  • Field name: "{#SENSORNAME}"; OID prefix: ".1.3.6.1.4.1.9999.1.1.1.1.1": Format: "Unchanged".
  • Field name: "{#SENSORTYPE}"; OID prefix: ".1.3.6.1.4.1.9999.1.1.1.1.2": Format: "Unchanged".
  • Field name: "{#SENSORVALUE}"; OID prefix: ".1.3.6.1.4.1.9999.1.1.1.1.3": Format: "Unchanged".

Después del preprocesamiento, la regla de descubrimiento devuelve una matriz JSON de conjuntos de macros.

Por ejemplo:

[
    {
        "{#SNMPINDEX}": "1",
        "{#SENSORNAME}": "Temperature Sensor",
        "{#SENSORTYPE}": "temp",
        "{#SENSORVALUE}": "100"
    },
    {
        "{#SNMPINDEX}": "2",
        "{#SENSORNAME}": "Humidity Sensor",
        "{#SENSORTYPE}": "humidity",
        "{#SENSORVALUE}": "200"
    }
]

Cada objeto representa un sensor descubierto y proporciona macros como {#SNMPINDEX}, {#SENSORNAME}, {#SENSORTYPE} y {#SENSORVALUE}.

Se agrupan por el índice SNMP, que es el sufijo numérico al final de cada OID (por ejemplo, .1, .2). Este índice identifica de forma única cada fila de la tabla SNMP y se extrae automáticamente como {#SNMPINDEX}.

4. En la regla de descubrimiento, cree uno o más prototipos de item (con la regla de descubrimiento como item maestro).

Por ejemplo, un item dependiente del valor del sensor:

  • En el campo Name, introduzca "Sensor {#SNMPINDEX}: {#SENSORNAME}".
  • En el campo Type, seleccione "Dependent item".
  • En el campo Key, introduzca "sensor.value[{#SNMPINDEX}]".
  • En el campo Master item, seleccione "SNMP walk item".

En la pestaña Preprocessing, añada un paso de preprocesamiento con el nombre "SNMP walk value" y el OID ".1.3.6.1.4.1.9999.1.1.1.1.3.{#SNMPINDEX}" en el campo Parameter. Format: "Unchanged".

Se descubrirán los siguientes items:

Name Key OID from which value is extracted Item value
Sensor 1: Temperature Sensor sensor.value[1] .1.3.6.1.4.1.9999.1.1.1.1.3.1 100
Sensor 2: Humidity Sensor sensor.value[2] .1.3.6.1.4.1.9999.1.1.1.1.3.2 200

Cuando se ejecuta la regla de descubrimiento, se crean items como sensor.value[1] y sensor.value[2].

Cada item dependiente extrae su valor del resultado del recorrido SNMP del item maestro mediante el preprocesamiento, sin realizar sus propias solicitudes SNMP independientes.

5. Haga referencia a los prototipos de item dependientes en los prototipos de trigger utilizando las mismas macros de la regla de descubrimiento. Ejemplo:

{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75

Esto genera un trigger para cada sensor descubierto (por ejemplo, sensor.value[1] y sensor.value[2]) y se activa si el valor más reciente (temperatura o humedad) supera 75.

6. Incluya items dependientes para cada entidad descubierta. Ejemplo de clave de item de gráfico:

sensor.value[{#SNMPINDEX}]

Se crea un gráfico por cada {#SNMPINDEX}, en el que se representan la temperatura y la humedad a lo largo del tiempo.

Esta configuración realiza una única solicitud de recorrido SNMP por ciclo de sondeo, independientemente del número de items descubiertos. Todos los items dependientes extraen sus valores del resultado del recorrido SNMP del item maestro mediante el preprocesamiento, lo que reduce significativamente el tráfico y la carga de SNMP.

Índices dinámicos con walk[]

Los índices dinámicos (por ejemplo, los índices de interfaz) pueden cambiar cuando se reconfigura el hardware. Para adaptarse a este comportamiento, se crea una regla maestra de descubrimiento SNMP walk con una clave como:

walk[1.3.6.1.2.1.2.2.1.10]

Después del preprocesamiento de SNMP walk a JSON, el resultado podría parecerse a:

[
    {
        "{#SNMPINDEX}": "2",
        "{#VALUE}": "123456"
    },
    {
        "{#SNMPINDEX}": "3",
        "{#VALUE}": "654321"
    }
]

Una plantilla de elemento dependiente utiliza la macro {#SNMPINDEX} para construir la clave:

net.if.in[{#SNMPINDEX}]

El preprocesamiento para esta plantilla incluye el nombre "Valor de SNMP walk" con el OID "1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}" en el campo Parámetro. Formato: "Sin cambios".

En tiempo de ejecución, se crean elementos reales como net.if.in[2] y net.if.in[3]. Si un índice de interfaz dado cambia (por ejemplo, si el índice 2 es reemplazado por 5 en la tabla SNMP), entonces en la siguiente ejecución de la regla de descubrimiento:

  • El elemento dependiente antiguo net.if.in[2] se marca como "perdido" o se elimina, y no se recopilan nuevos datos para ese elemento.
  • Se crea un nuevo elemento dependiente net.if.in[5], comenzando con un historial vacío.
  • Los datos históricos de net.if.in[2] no se trasladan automáticamente a net.if.in[5].

Ejemplo de plantilla de disparador:

{Template_Interface:net.if.in[{#SNMPINDEX}].last()} > 1000000000

El ejemplo de plantilla de gráfico incluye los elementos:

net.if.in[{#SNMPINDEX}]
net.if.out[{#SNMPINDEX}]

Esta configuración garantiza una monitorización fiable de tablas con índices dinámicos mientras se minimiza el tráfico SNMP: solo se requiere un único SNMP walk por ciclo de sondeo, y las plantillas de elementos dependientes extraen los valores necesarios.

Entidades descubiertas

Cuando el servidor se ejecuta, creará elementos dependientes reales, disparadores y gráficos basados en los valores que devuelve la regla de descubrimiento SNMP.