[comment]: # ({03437da9-5508ac64})
# 4 Odkrywanie OID-ów SNMP

[comment]: # ({/03437da9-5508ac64})

[comment]: # ({b8212a1d-3680a9fa})
#### Przegląd

W tej sekcji przeprowadzimy [odkrywanie niskiego poziomu](/manual/discovery/low_level_discovery) na urządzeniu SNMP.

Ta metoda odkrywania OID SNMP jest obsługiwana od wersji 6.4 serwera/proxy Zabbix.

[comment]: # ({/b8212a1d-3680a9fa})

[comment]: # ({3e67054c-bff9418f})
#### Przykładowa konfiguracja

1\. Utwórz pozycję agenta SNMP z kluczem takim jak:

```bash
walk[.1.3.6.1.4.1.9999.1.1.1.1]
```

![](../../../../../assets/en/manual/discovery/low_level_discovery/snmp_walk_item.png)

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ą:

```ini
.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”.

![](../../../../../assets/en/manual/discovery/low_level_discovery/snmp_discovery_dep_item.png)

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:

```json
[
    {
        "{#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”.

![](../../../../../assets/en/manual/discovery/low_level_discovery/snmp_item_prototype.png)

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:

```default
{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:

```default
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.

[comment]: # ({/3e67054c-bff9418f})

[comment]: # ({1f7ddedc-indexes})
#### 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:

```bash
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:

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

Prototyp pozycji zależnej używa makra `{#SNMPINDEX}` do zbudowania klucza:

```default
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:

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

Przykład prototypu wykresu obejmuje pozycje:

```default
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.

[comment]: # ({/1f7ddedc-indexes})

[comment]: # ({1815f72a-2be94533})
#### Wykryte encje

Gdy serwer jest uruchomiony, utworzy rzeczywiste zależne pozycje, wyzwalacze i wykresy na podstawie wartości zwracanych przez regułę wykrywania SNMP.

[comment]: # ({/1815f72a-2be94533})
