# 3 Обнаружение SNMP OID'ов

#### Обзор

В этом разделе мы выполним
[обнаружение](/ru/manual/discovery/low_level_discovery) SNMP на
коммутаторе.

#### Ключ элемента данных

В отличие от обнаружения файловых систем и сетевых интерфейсов - этот
элемент данных не требует наличия ключа "snmp.discovery", достаточно
указать, что типом элемента данных является SNMP агент.

Обнаружение SNMP OID'ов поддерживается начиная с Zabbix сервера/прокси
2.0.

Для настройки правила обнаружения, выполните следующее:

-   Перейдите в: *Настройка* → *Шаблоны*
-   Нажмите на *Обнаружение* в строке с соответствующим шаблоном

![](../../../../assets/en/manual/discovery/low_level_discovery/templates_snmp0.png){width="600"}

-   Нажмите на *Создать правило обнаружения* в верхнем правом углу
    экрана
-   Заполните диалог правила обнаружение необходимыми деталями как
    показано на скриншоте ниже

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

Все обязательные поля ввода отмечены красной звёздочкой.

OID'ы для обнаружения добавляются в поле SNMP OID в следующем формате:
`discovery[{#МАКРОС1}, oid1, {#МАКРОС2}, oid2, …,]`

где *{\#МАКРОС1}*, *{\#МАКРОС2}* … допустимые имена низкоуровневых
макросов и *oid1*, *oid2*... являются OID'ами способными сгенерировать
осмысленные значения для этих макросов. Встроенный макрос
*{\#SNMPINDEX}* содержит индекс обнаруженного OID, который применяется к
обнаруженным объектам. Обнаруженные объекты группируются по значению
макроса *{\#SNMPINDEX}*.

Для понимания того, что мы имеем в виду, давайте выполним несколько раз
snmpwalk на нашем коммутаторе:

    $ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifDescr
    IF-MIB::ifDescr.1 = STRING: WAN
    IF-MIB::ifDescr.2 = STRING: LAN1
    IF-MIB::ifDescr.3 = STRING: LAN2

    $ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifPhysAddress
    IF-MIB::ifPhysAddress.1 = STRING: 8:0:27:90:7a:75
    IF-MIB::ifPhysAddress.2 = STRING: 8:0:27:90:7a:76
    IF-MIB::ifPhysAddress.3 = STRING: 8:0:27:2b:af:9e

И зададим SNMP OID равным:
`discovery[{#IFDESCR}, ifDescr, {#IFPHYSADDRESS}, ifPhysAddress]`

Теперь это правило будет обнаруживать объекты с макросом {\#IFDESCR}
равным **WAN**, **LAN1** и **LAN2**, макросом {\#IFPHYSADDRESS} равным
**8:0:27:90:7a:75**, **8:0:27:90:7a:76**, и **8:0:27:2b:af:9e**,
макросом {\#SNMPINDEX} равным индексам обнаруженных OID **1**, **2** и
**3**:

``` {.java}
[
    {
        "{#SNMPINDEX}": "1",
        "{#IFDESCR}": "WAN",
        "{#IFPHYSADDRESS}": "8:0:27:90:7a:75"
    },
    {
        "{#SNMPINDEX}": "2",
        "{#IFDESCR}": "LAN1",
        "{#IFPHYSADDRESS}": "8:0:27:90:7a:76"
    },
    {
        "{#SNMPINDEX}": "3",
        "{#IFDESCR}": "LAN2",
        "{#IFPHYSADDRESS}": "8:0:27:2b:af:9e"
    }
]
```

Если обнаруженный объект не имеет указанный OID, тогда по этому объекту
соответстующий макрос пропускается. Например, если у нас есть следующие
данные:

    ifDescr.1 "Interface #1"
    ifDescr.2 "Interface #2"
    ifDescr.4 "Interface #4"

    ifAlias.1 "eth0"
    ifAlias.2 "eth1"
    ifAlias.3 "eth2"
    ifAlias.5 "eth4"

Тогда, в случае SNMP обнаружения
`discovery[{#IFDESCR}, ifDescr, {#IFALIAS}, ifAlias]` вернется следующая
структура:

``` {.java}
[
    {
        "{#SNMPINDEX}": 1,
        "{#IFDESCR}": "Interface #1",
        "{#IFALIAS}": "eth0"
    },
    {
        "{#SNMPINDEX}": 2,
        "{#IFDESCR}": "Interface #2",
        "{#IFALIAS}": "eth1"
    },
    {
        "{#SNMPINDEX}": 3,
        "{#IFALIAS}": "eth2"
    },
    {
        "{#SNMPINDEX}": 4,
        "{#IFDESCR}": "Interface #4"
    },
    {
        "{#SNMPINDEX}": 5,
        "{#IFALIAS}": "eth4"
    }
]
```

#### Прототипы элементов данных

Следующий скриншот иллюстрирует каким образом мы можем использовать эти
макросы в прототипах элементов данных:

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

Опять же, вы можете создать столько прототипов элементов данных, сколько
необходимо:

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

#### Прототипы триггеров

Следующий скриншот иллюстрирует каким образом мы можем использовать эти
макросы в прототипах триггеров:

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

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

#### Прототипы графиков

Следующий скриншот иллюстрирует каким образом мы можем использовать эти
макросы в прототипах графиков:

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

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

Результат нашего правила обнаружения:

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

#### Обнаруженные объекты

Когда сервер выполнит правило обнаружения, будут созданы реальные
элементы данных, триггеры и графики на основе значений, которые вернет
правило обнаружения SNMP. В настройках узла сети эти объекты будут иметь
префикс с оранжевой ссылкой на правило обнаружения, с которого пришли
эти объекты.

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

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

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