4 Odkrywanie OID-ów SNMP
Przegląd
W tej sekcji przeprowadzimy odkrywanie niskiego poziomu na urządzeniu SNMP.
Ta metoda odkrywania OID SNMP jest obsługiwana od wersji 6.4 serwera/proxy Zabbix.
Przykładowa konfiguracja
1. Utwórz pozycję agenta SNMP z kluczem takim jak:
walk[.1.3.6.1.4.1.9999.1.1.1.1]

Ta pozycja wykonuje pojedyncze przejście po tabeli SNMP i zwraca wszystkie wpisy tabeli w jednym żądaniu, w formacie odpowiadającym danym wyjściowym narzędzia snmpwalk z opcjami formatowania -Oe -Ot -On.
Zwróci następującą wielowierszową wartość tekstową:
.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. Utwórz regułę wykrywania:
- W polu Name wprowadź opisową nazwę reguły wykrywania (np. „Wykryj czujniki”).
- W polu Type wybierz „Dependent item”.
- W polu Key wprowadź opisowy klucz (np. „net.if.discovery”).
- W polu Master item wybierz „SNMP walk item”.

3. Na karcie Preprocessing dodaj krok przetwarzania wstępnego z opcją „SNMP walk to JSON” wybraną na liście rozwijanej Name i z 3 parametrami:
- 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".
Po przetwarzaniu wstępnym reguła wykrywania zwraca tablicę JSON zestawów makr.
Na przykład:
[
{
"{#SNMPINDEX}": "1",
"{#SENSORNAME}": "Temperature Sensor",
"{#SENSORTYPE}": "temp",
"{#SENSORVALUE}": "100"
},
{
"{#SNMPINDEX}": "2",
"{#SENSORNAME}": "Humidity Sensor",
"{#SENSORTYPE}": "humidity",
"{#SENSORVALUE}": "200"
}
]
Każdy obiekt reprezentuje jeden wykryty czujnik i udostępnia makra takie jak {#SNMPINDEX}, {#SENSORNAME}, {#SENSORTYPE} oraz {#SENSORVALUE}.
Są one grupowane według indeksu SNMP, który jest numerycznym sufiksem na końcu każdego OID (np. .1, .2) — ten indeks jednoznacznie identyfikuje każdy wiersz w tabeli SNMP i jest automatycznie wyodrębniany jako {#SNMPINDEX}.
4. W ramach reguły wykrywania utwórz jeden lub więcej prototypów pozycji (z regułą wykrywania jako pozycją nadrzędną).
Na przykład zależna pozycja wartości czujnika:
- W polu Name wprowadź „Sensor {#SNMPINDEX}: {#SENSORNAME}”.
- W polu Type wybierz „Dependent item”.
- W polu Key wprowadź „sensor.value[{#SNMPINDEX}]”.
- W polu Master item wybierz „SNMP walk item”.

Na karcie Preprocessing dodaj krok przetwarzania wstępnego o nazwie „SNMP walk value” z OID ".1.3.6.1.4.1.9999.1.1.1.1.3.{#SNMPINDEX}" w polu Parameter. Format: "Unchanged".
Zostaną wykryte następujące pozycje:
| 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 |
Po uruchomieniu reguły wykrywania zostaną utworzone pozycje takie jak sensor.value[1], sensor.value[2].
Każda pozycja zależna wyodrębnia swoją wartość z wyniku SNMP walk pozycji nadrzędnej przy użyciu przetwarzania wstępnego, bez wykonywania osobnych żądań SNMP.
5. Odwołuj się do prototypów pozycji zależnych w prototypach wyzwalaczy, używając tych samych makr z reguły wykrywania. Przykład:
{Template_Sensor:sensor.value[{#SNMPINDEX}].last()} > 75
Powoduje to utworzenie wyzwalacza dla każdego wykrytego czujnika (na przykład sensor.value[1], sensor.value[2]) i jego uruchomienie, jeśli najnowsza wartość (temperatury lub wilgotności) przekroczy 75.
6. Uwzględnij pozycje zależne dla każdej wykrytej jednostki. Przykładowy klucz elementu wykresu:
sensor.value[{#SNMPINDEX}]
Dla każdego {#SNMPINDEX} tworzony jest jeden wykres, przedstawiający temperaturę i wilgotność w czasie.
Ta konfiguracja wykonuje tylko jedno żądanie SNMP walk na cykl odpytywania, niezależnie od liczby wykrytych pozycji. Wszystkie pozycje zależne wyodrębniają swoje wartości z nadrzędnego wyniku SNMP walk przy użyciu przetwarzania wstępnego, co znacząco zmniejsza ruch SNMP i obciążenie.
Dynamiczne indeksy z walk[]
Dynamiczne indeksy (na przykład indeksy interfejsów) mogą się zmieniać po rekonfiguracji sprzętu. Aby uwzględnić takie zachowanie, tworzona jest nadrzędna reguła wykrywania SNMP walk z kluczem takim jak:
walk[1.3.6.1.2.1.2.2.1.10]
Po przetwarzaniu wstępnym SNMP walk do JSON wynik może wyglądać następująco:
[
{
"{#SNMPINDEX}": "2",
"{#VALUE}": "123456"
},
{
"{#SNMPINDEX}": "3",
"{#VALUE}": "654321"
}
]
Prototyp pozycji zależnej używa makra {#SNMPINDEX} do zbudowania klucza:
net.if.in[{#SNMPINDEX}]
Przetwarzanie wstępne dla tego prototypu obejmuje nazwę „SNMP walk value” z OID „1.3.6.1.2.1.2.2.1.10.{#SNMPINDEX}” w polu Parameter. Format: „Unchanged”.
W czasie działania tworzone są rzeczywiste pozycje, takie jak net.if.in[2] i net.if.in[3].
Jeśli dany indeks interfejsu ulegnie zmianie (na przykład jeśli indeks 2 zostanie zastąpiony przez 5 w tabeli SNMP), to przy następnym uruchomieniu reguły wykrywania:
- Stara zależna pozycja net.if.in[2] zostanie oznaczona jako „lost” lub usunięta i nie będą już zbierane dla niej nowe dane.
- Zostanie utworzona nowa zależna pozycja net.if.in[5], rozpoczynająca z pustą historią.
- Dane historyczne z net.if.in[2] nie są automatycznie przenoszone do net.if.in[5].
Przykład prototypu wyzwalacza:
{Template_Interface:net.if.in[{#SNMPINDEX}].last()} > 1000000000
Przykład prototypu wykresu obejmuje pozycje:
net.if.in[{#SNMPINDEX}]
net.if.out[{#SNMPINDEX}]
Ta konfiguracja zapewnia niezawodne monitorowanie tabel z dynamicznymi indeksami przy jednoczesnym zminimalizowaniu ruchu SNMP — wymagany jest tylko jeden SNMP walk na cykl odpytywania, a prototypy pozycji zależnych wyodrębniają potrzebne wartości.
Wykryte encje
Gdy serwer jest uruchomiony, utworzy rzeczywiste zależne pozycje, wyzwalacze i wykresy na podstawie wartości zwracanych przez regułę wykrywania SNMP.