[comment]: # ({03437da9-03437da9})
# 4. Обнаружение SNMP OID'ов

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

[comment]: # ({cf8bf5a8-cf8bf5a8})
#### Обзор

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

[comment]: # ({/cf8bf5a8-cf8bf5a8})

[comment]: # ({48556d91-d8452a6a})
#### Ключ элемента данных

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

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

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

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

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

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

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

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

где *{\#МАКРОС}*, *{\#МАКРОС2}* … — это корректные имена LLD макросов, а *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"
    }
]
```

[comment]: # ({/48556d91-d8452a6a})

[comment]: # ({96106d89-cc4d2566})
#### Прототипы элементов данных

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

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

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

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

[comment]: # ({/96106d89-cc4d2566})

[comment]: # ({da4e62e5-042beac9})
#### Прототипы триггеров

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

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

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

[comment]: # ({/da4e62e5-042beac9})

[comment]: # ({29d1b142-fbe4f4fa})
#### Прототипы графиков

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

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

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

Общий вид нашего правила обнаружения:

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

[comment]: # ({/29d1b142-fbe4f4fa})

[comment]: # ({16927fe4-76c066a2})
#### Обнаруженные объекты

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

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

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

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

[comment]: # ({/16927fe4-76c066a2})
