4 Scoperta degli OID SNMP
Panoramica
In questa sezione eseguiremo una low-level discovery su un dispositivo SNMP.
Questo metodo di discovery degli OID SNMP è supportato da Zabbix server/proxy 6.4.
Configurazione di esempio
1. Creare un item agent SNMP con una chiave come:
walk[.1.3.6.1.4.1.9999.1.1.1.1]

Questo item esegue una singola scansione della tabella SNMP e restituisce tutte le voci della tabella in un'unica richiesta, in un formato corrispondente all'output dell'utilità snmpwalk con le opzioni di formattazione -Oe -Ot -On.
Restituirà il seguente valore di testo multilinea:
.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. Creare una regola di discovery:
- Nel campo Name, inserire un nome descrittivo per la regola di discovery (ad esempio, "Discover sensors").
- Nel campo Type, selezionare "Dependent item".
- Nel campo Key, inserire una chiave descrittiva (ad esempio, "net.if.discovery").
- Nel campo Master item, selezionare "SNMP walk item".

3. Nella scheda Preprocessing, aggiungere un passaggio di preprocessing con "SNMP walk to JSON" nel menu a discesa Name con 3 parametri:
- 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".
Dopo il preprocessing, la regola di discovery restituisce un array JSON di insiemi di macro.
Per esempio:
[
{
"{#SNMPINDEX}": "1",
"{#SENSORNAME}": "Temperature Sensor",
"{#SENSORTYPE}": "temp",
"{#SENSORVALUE}": "100"
},
{
"{#SNMPINDEX}": "2",
"{#SENSORNAME}": "Humidity Sensor",
"{#SENSORTYPE}": "humidity",
"{#SENSORVALUE}": "200"
}
]
Ogni oggetto rappresenta un sensore individuato e fornisce macro come {#SNMPINDEX}, {#SENSORNAME}, {#SENSORTYPE} e {#SENSORVALUE}.
Sono raggruppati in base all'indice SNMP, che è il suffisso numerico alla fine di ogni OID (ad esempio, .1, .2) — questo indice identifica in modo univoco ogni riga nella tabella SNMP ed è estratto automaticamente come {#SNMPINDEX}.
4. Sotto la regola di discovery, creare uno o più prototipi di item (con la regola di discovery come item master).
Per esempio, item dipendente del valore del sensore:
- Nel campo Name, inserire "Sensor {#SNMPINDEX}: {#SENSORNAME}".
- Nel campo Type, selezionare "Dependent item".
- Nel campo Key, inserire "sensor.value[{#SNMPINDEX}]".
- Nel campo Master item, selezionare "SNMP walk item".

Nella scheda Preprocessing, aggiungere un passaggio di preprocessing con nome "SNMP walk value" con l'OID ".1.3.6.1.4.1.9999.1.1.1.1.3.{#SNMPINDEX}" nel campo Parameter. Format: "Unchanged".
Saranno individuati i seguenti item:
| Name | Key | OID da cui viene estratto il valore | Valore item |
|---|---|---|---|
| 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 |
Quando la regola di discovery viene eseguita, vengono creati item come sensor.value[1], sensor.value[2].
Ogni item dipendente estrae il proprio valore dal risultato SNMP walk dell'item master usando il preprocessing, senza eseguire richieste SNMP separate.
5. Fare riferimento ai prototipi di item dipendenti nei prototipi di trigger usando le stesse macro della regola di discovery. Esempio:
{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75
Questo produce un trigger per ogni sensore individuato (per esempio, sensor.value[1], sensor.value[2]) e si attiva se l'ultimo valore (temperatura o umidità) supera 75.
6. Includere item dipendenti per ogni entità individuata. Esempio di chiave dell'elemento del grafico:
sensor.value[{#SNMPINDEX}]
Viene creato un grafico per ogni {#SNMPINDEX}, che traccia temperatura e umidità nel tempo.
Questa configurazione esegue una sola richiesta SNMP walk per ciclo di polling, indipendentemente dal numero di item individuati. Tutti gli item dipendenti estraggono i propri valori dal risultato SNMP walk master usando il preprocessing, riducendo significativamente il traffico SNMP e il carico.
Indici dinamici con walk[]
Gli indici dinamici (ad esempio, gli indici delle interfacce) possono cambiare quando l'hardware viene riconfigurato. Per gestire questo comportamento, viene creata una regola di discovery master SNMP walk con una chiave come:
walk[1.3.6.1.2.1.2.2.1.10]
Dopo la pre-elaborazione da SNMP walk a JSON, il risultato potrebbe essere simile a:
[
{
"{#SNMPINDEX}": "2",
"{#VALUE}": "123456"
},
{
"{#SNMPINDEX}": "3",
"{#VALUE}": "654321"
}
]
Un prototipo di item dipendente utilizza la macro {#SNMPINDEX} per costruire la chiave:
net.if.in[{#SNMPINDEX}]
La pre-elaborazione per questo prototipo include il nome "SNMP walk value" con l'OID "1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}" nel campo Parameter. Format: "Unchanged".
In fase di esecuzione, vengono creati item effettivi come net.if.in[2] e net.if.in[3].
Se un determinato indice di interfaccia cambia (ad esempio, se l'indice 2 viene sostituito da 5 nella tabella SNMP), alla successiva esecuzione della regola di discovery:
- Il vecchio item dipendente net.if.in[2] viene contrassegnato come "lost" oppure rimosso, e non vengono più raccolti nuovi dati per quell'item.
- Viene creato un nuovo item dipendente net.if.in[5], che inizia con una cronologia vuota.
- I dati storici di net.if.in[2] non vengono spostati automaticamente in net.if.in[5].
Esempio di prototipo di trigger:
{Template_Interface:net.if.in[{#SNMPINDEX}].last()} > 1000000000
L'esempio di prototipo di grafico include gli item:
net.if.in[{#SNMPINDEX}]
net.if.out[{#SNMPINDEX}]
Questa configurazione garantisce un monitoraggio affidabile delle tabelle con indici dinamici, riducendo al minimo il traffico SNMP: è richiesto un solo SNMP walk per ciclo di polling, mentre i prototipi di item dipendenti estraggono i valori necessari.
Entità rilevate
Quando il server è in esecuzione, creerà item dipendenti reali, trigger e grafici in base ai valori restituiti dalla regola di individuazione SNMP.