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 dell'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'utility snmpwalk con le opzioni di formattazione -Oe -Ot -On.
Restituirà il seguente valore 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" nell'elenco 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 set di macro.
Ad esempio:
[
{
"{#SNMPINDEX}": "1",
"{#SENSORNAME}": "Temperature Sensor",
"{#SENSORTYPE}": "temp",
"{#SENSORVALUE}": "100"
},
{
"{#SNMPINDEX}": "2",
"{#SENSORNAME}": "Humidity Sensor",
"{#SENSORTYPE}": "humidity",
"{#SENSORVALUE}": "200"
}
]
Ogni oggetto rappresenta un sensore rilevato e fornisce macro come {#SNMPINDEX}, {#SENSORNAME}, {#SENSORTYPE} e {#SENSORVALUE}.
Sono raggruppati in base all'indice SNMP, ovvero il suffisso numerico alla fine di ogni OID (ad esempio, .1, .2). Questo indice identifica univocamente ogni riga nella tabella SNMP e viene estratto automaticamente come {#SNMPINDEX}.
4. Nella regola di discovery, creare uno o più prototipi di item (con la regola di discovery come master item).
Ad esempio, un item dipendente per il 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 il nome "SNMP walk value" e l'OID ".1.3.6.1.4.1.9999.1.1.1.1.3.{#SNMPINDEX}" nel campo Parameter. Format: "Unchanged".
Verranno rilevati i seguenti item:
| 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 |
Quando viene eseguita la regola di discovery, vengono creati item come sensor.value[1] e sensor.value[2].
Ogni item dipendente estrae il proprio valore dal risultato della scansione SNMP del master item tramite il preprocessing, senza eseguire richieste SNMP separate.
5. Fare riferimento ai prototipi di item dipendenti nei prototipi di trigger utilizzando le stesse macro della regola di discovery. Esempio:
{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75
Questo genera un trigger per ogni sensore rilevato (ad esempio, sensor.value[1], sensor.value[2]) e si attiva se l'ultimo valore (temperatura o umidità) supera 75.
6. Includere gli item dipendenti per ogni entità rilevata. Esempio di chiave dell'item del grafico:
sensor.value[{#SNMPINDEX}]
Viene creato un grafico per ogni {#SNMPINDEX}, che rappresenta temperatura e umidità nel tempo.
Questa configurazione esegue una sola richiesta di scansione SNMP per ogni ciclo di polling, indipendentemente dal numero di item rilevati. Tutti gli item dipendenti estraggono i propri valori dal risultato della scansione SNMP del master item tramite il preprocessing, riducendo significativamente il traffico e il carico SNMP.
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.