SNMP: различия между версиями

Материал из Wiren Board
м
(Отметить эту версию для перевода)
Строка 1: Строка 1:
<translate>
<translate>
<!--T:1-->
'''SNMP (Simple Network Management Protocol)''' - стандартный протокол для управления сетевыми устройствами в IP-сетях.
'''SNMP (Simple Network Management Protocol)''' - стандартный протокол для управления сетевыми устройствами в IP-сетях.


<!--T:2-->
Часто используется для обмена сервисной информацией с устройствами, представляя данные в виде отдельных переменных.
Часто используется для обмена сервисной информацией с устройствами, представляя данные в виде отдельных переменных.


<!--T:3-->
Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п.
Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п.


<!--T:4-->
В Wiren Board добавлен драйвер для получения данных от SNMP-устройств. Драйвер написан на Go.
В Wiren Board добавлен драйвер для получения данных от SNMP-устройств. Драйвер написан на Go.


= Установка и настройка на контроллере =
= Установка и настройка на контроллере = <!--T:5-->


== Установка ==
== Установка == <!--T:6-->


<!--T:7-->
Сначала нужно установить пакет wb-mqtt-snmp. В консоли устройства вводим
Сначала нужно установить пакет wb-mqtt-snmp. В консоли устройства вводим


<!--T:8-->
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# apt-get update
# apt-get update
Строка 19: Строка 25:
</syntaxhighlight>
</syntaxhighlight>


== Настройка ==
== Настройка == <!--T:9-->


<!--T:10-->
Структура конфигурации очень похожа на wb-mqtt-serial.
Структура конфигурации очень похожа на wb-mqtt-serial.


<!--T:11-->
Пример конфигурационного файла (/etc/wb-mqtt-snmp.conf):
Пример конфигурационного файла (/etc/wb-mqtt-snmp.conf):


<!--T:12-->
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
Строка 61: Строка 70:
</syntaxhighlight>
</syntaxhighlight>


<!--T:13-->
Рассмотрим его несколько подробней.
Рассмотрим его несколько подробней.


=== Файл конфигурации ===
=== Файл конфигурации === <!--T:14-->


<!--T:15-->
* '''debug''' - флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию - false);
* '''debug''' - флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию - false);
* '''num_workers''' - максимальное количество одновременно устанавливаемых SNMP-соединений.
* '''num_workers''' - максимальное количество одновременно устанавливаемых SNMP-соединений.
Строка 70: Строка 81:
* '''devices''' - список опрашиваемых устройств.
* '''devices''' - список опрашиваемых устройств.


==== Описание устройства ====
==== Описание устройства ==== <!--T:16-->


<!--T:17-->
{| class="wikitable"
{| class="wikitable"
|-
|-
Строка 100: Строка 112:
|}
|}


==== Описание каналов ====
==== Описание каналов ==== <!--T:18-->


<!--T:19-->
{| class="wikitable"
{| class="wikitable"
|-
|-
Строка 122: Строка 135:
|}
|}


== Преобразование OID ==
== Преобразование OID == <!--T:20-->


<!--T:21-->
При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые.
При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые.


<!--T:22-->
Если OID представлен в числовом виде (начинается с точки: .1.2.3.4), никакого преобразования не происходит.
Если OID представлен в числовом виде (начинается с точки: .1.2.3.4), никакого преобразования не происходит.


<!--T:23-->
Если OID представлен в текстовом виде (например, SNMPv2-MIB::sysName.0), необходимо, чтобы в системе был установлен соответствующий MIB, содержащий описание этой переменной.
Если OID представлен в текстовом виде (например, SNMPv2-MIB::sysName.0), необходимо, чтобы в системе был установлен соответствующий MIB, содержащий описание этой переменной.
Преобразование имён происходит с помощью вызова утилиты snmptranslate, так что можно проверить наличие MIB вручную с помощью команды
Преобразование имён происходит с помощью вызова утилиты snmptranslate, так что можно проверить наличие MIB вручную с помощью команды


<!--T:24-->
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# snmptranslate -On yourOid
# snmptranslate -On yourOid
</syntaxhighlight>
</syntaxhighlight>


<!--T:25-->
Параметр '''oid_prefix''' в описании устройства позволяет опустить имя MIB (префикс; '''SNMPv2-MIB'''::sysName.0). В этом случае, префикс из '''oid_prefix''' будет автоматически  
Параметр '''oid_prefix''' в описании устройства позволяет опустить имя MIB (префикс; '''SNMPv2-MIB'''::sysName.0). В этом случае, префикс из '''oid_prefix''' будет автоматически  
присоединён ко всем OID каналов устройства, где явно не указан префикс. Например, при '''oid_prefix''' = SNMPv2-MIB:
присоединён ко всем OID каналов устройства, где явно не указан префикс. Например, при '''oid_prefix''' = SNMPv2-MIB:


<!--T:26-->
* sysName.0 -> '''SNMPv2-MIB::'''sysName.0
* sysName.0 -> '''SNMPv2-MIB::'''sysName.0
* sysLocation.0 -> '''SNMPv2-MIB::'''sysLocation.0
* sysLocation.0 -> '''SNMPv2-MIB::'''sysLocation.0
Строка 143: Строка 162:
* .1.3.6.1.2.1.1.6.0 -> .1.3.6.1.2.1.1.6.0
* .1.3.6.1.2.1.1.6.0 -> .1.3.6.1.2.1.1.6.0


==== Установка MIB ====
==== Установка MIB ==== <!--T:27-->


<!--T:28-->
Если у Вас есть требуемый MIB-файл, то достаточно скопировать его в директорию /root/.snmp/mibs, предварительно создав её:
Если у Вас есть требуемый MIB-файл, то достаточно скопировать его в директорию /root/.snmp/mibs, предварительно создав её:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 151: Строка 171:
</syntaxhighlight>
</syntaxhighlight>


<!--T:29-->
После этого проверьте правильность работы snmptranslate с каким-либо известным OID:
После этого проверьте правильность работы snmptranslate с каким-либо известным OID:


<!--T:30-->
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# snmptranslate -On yourOid
# snmptranslate -On yourOid
</syntaxhighlight>
</syntaxhighlight>


== Шаблоны ==
== Шаблоны == <!--T:31-->


<!--T:32-->
Для описания устройств удобно (хотя и не обязательно) использовать ''шаблоны''. ''Шаблон (тип устройства)'' - это внешний конфигурационный файл (располагается в /usr/share/wb-mqtt-snmp/templates  
Для описания устройств удобно (хотя и не обязательно) использовать ''шаблоны''. ''Шаблон (тип устройства)'' - это внешний конфигурационный файл (располагается в /usr/share/wb-mqtt-snmp/templates  
и имеет имя config-[device-type-name].json, например, config-test-snmp.json), в котором содержится базовое описание устройства (например, имя сообщества SNMP) и базовое описание всех его каналов.
и имеет имя config-[device-type-name].json, например, config-test-snmp.json), в котором содержится базовое описание устройства (например, имя сообщества SNMP) и базовое описание всех его каналов.


<!--T:33-->
Для использования шаблона в описании устройства в конфигурационном файле укажите поле "''device_type''". Среди всех представленных шаблонов будет выбран шаблон с таким же значением ''device_type'', при этом
Для использования шаблона в описании устройства в конфигурационном файле укажите поле "''device_type''". Среди всех представленных шаблонов будет выбран шаблон с таким же значением ''device_type'', при этом
все поля, которые не были определены в конфигурационном файле, примут значения из шаблона.
все поля, которые не были определены в конфигурационном файле, примут значения из шаблона.


<!--T:34-->
Точно так же это работает с каналами. Сравнение каналов происходит по обязательному полю ''name''; если имя канала из конфигурационного файла совпадёт с именем канала в шаблоне, из шаблона будут взяты  
Точно так же это работает с каналами. Сравнение каналов происходит по обязательному полю ''name''; если имя канала из конфигурационного файла совпадёт с именем канала в шаблоне, из шаблона будут взяты  
все неуказанные значения.
все неуказанные значения.


=== Пример ===
=== Пример === <!--T:35-->


<!--T:36-->
Шаблон config-my-device.json:
Шаблон config-my-device.json:


<!--T:37-->
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
Строка 190: Строка 217:
</syntaxhighlight>
</syntaxhighlight>


<!--T:38-->
Конфигурационный файл:
Конфигурационный файл:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Строка 216: Строка 244:
</syntaxhighlight>
</syntaxhighlight>


<!--T:39-->
В данном случае мы описали один шаблон my-device, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов.
В данном случае мы описали один шаблон my-device, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов.


<!--T:40-->
Поскольку ''Device 1'' находится в локальной сети, логично выставить ему небольшое значение таймаута, чтобы быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.
Поскольку ''Device 1'' находится в локальной сети, логично выставить ему небольшое значение таймаута, чтобы быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.


<!--T:41-->
''Device 2'' - удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем
''Device 2'' - удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем
интервал опроса на бОльший, чтобы снизить нагрузку на сеть.
интервал опроса на бОльший, чтобы снизить нагрузку на сеть.


<!--T:42-->
Таким образом, шаблоны очень удобно использовать для описания группы однотипных устройств.
Таким образом, шаблоны очень удобно использовать для описания группы однотипных устройств.


= Список шаблонов =
= Список шаблонов = <!--T:43-->


<!--T:44-->
В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств (список будет расширяться):
В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств (список будет расширяться):


<!--T:45-->
{| class="wikitable"
{| class="wikitable"
|-
|-

Версия 12:57, 12 июня 2019

SNMP (Simple Network Management Protocol) - стандартный протокол для управления сетевыми устройствами в IP-сетях.

Часто используется для обмена сервисной информацией с устройствами, представляя данные в виде отдельных переменных.

Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п.

В Wiren Board добавлен драйвер для получения данных от SNMP-устройств. Драйвер написан на Go.

Установка и настройка на контроллере

Установка

Сначала нужно установить пакет wb-mqtt-snmp. В консоли устройства вводим

# apt-get update
# apt-get install wb-mqtt-snmp

Настройка

Структура конфигурации очень похожа на wb-mqtt-serial.

Пример конфигурационного файла (/etc/wb-mqtt-snmp.conf):

{
    "debug": false,
    "num_workers": 4,
    "devices": [
        {
            "address": "192.168.0.1",
            "name": "My SNMP server",
            "community": "public",
            "oid_prefix": "SNMPv2-MIB",
            "channels": [
                {
                    "name": "Number of services",
                    "oid": "sysServices.0",
                    "poll_interval": 1000
                },
                {
                    "name": "Boot string",
                    "oid": "HOST-RESOURCES-MIB::hrSystemInitialLoadParameters.0",
                    "poll_interval": 10000
                },
                {
                    "name": "System location",
                    "oid": ".1.3.6.1.2.1.1.6.0"
                }
            ]
        },
        {
            "address": "test.net-snmp.org",
            "name": "Test SNMP server",
            "device_type": "test-snmp"
        }
    ]
}

Рассмотрим его несколько подробней.

Файл конфигурации

  • debug - флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию - false);
  • num_workers - максимальное количество одновременно устанавливаемых SNMP-соединений.
    • Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Однако, увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В общем случае можно оставить значение по умолчанию (4).
  • devices - список опрашиваемых устройств.

Описание устройства

Имя параметра Тип Описание Обязательный Значение по умолчанию
name string Имя устройства Нет SNMP [address]_[community]
id string ID устройства в MQTT Нет snmp_[address]_[community]
address string Сетевой адрес устройства Да -
device_type string Тип устройства (нужен для загрузки шаблона) Нет -
enabled bool Включить устройство в опрос? Нет true
community string Имя сообщества SNMP Да -
oid_prefix string Префикс (имя MIB) для текстовых OID каналов, где оный не указан явно Нет -
snmp_version string Версия SNMP (на сегодняшний день поддерживается только 2с) Нет 2c
snmp_timeout integer Время ожидания ответа (в секундах) Нет 5
poll_interval integer Минимальное время опроса для каждого канала по умолчанию Нет -
channels array Описание каналов устройства (переменных SNMP) Нет -

Описание каналов

Имя параметра Тип Описание Обязательный Значение по умолчанию
name string Имя канала Да -
oid string OID в числовом или текстовом виде Да -
enabled boolean Включить канал в опрос? Нет true
control_type string Тип данных (согласно Conventions) Нет text
units string Обозначение единиц измерения (для control_type == value) Нет -
scale float Множитель (для числовых значений) Нет 1.0
poll_interval int Минимальный интервал опроса канала (в мс) Нет poll_interval из описания устройства, либо 1000

Преобразование OID

При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые.

Если OID представлен в числовом виде (начинается с точки: .1.2.3.4), никакого преобразования не происходит.

Если OID представлен в текстовом виде (например, SNMPv2-MIB::sysName.0), необходимо, чтобы в системе был установлен соответствующий MIB, содержащий описание этой переменной. Преобразование имён происходит с помощью вызова утилиты snmptranslate, так что можно проверить наличие MIB вручную с помощью команды

# snmptranslate -On yourOid

Параметр oid_prefix в описании устройства позволяет опустить имя MIB (префикс; SNMPv2-MIB::sysName.0). В этом случае, префикс из oid_prefix будет автоматически присоединён ко всем OID каналов устройства, где явно не указан префикс. Например, при oid_prefix = SNMPv2-MIB:

  • sysName.0 -> SNMPv2-MIB::sysName.0
  • sysLocation.0 -> SNMPv2-MIB::sysLocation.0
  • HOST-RESOURCES-MIB::hrSystemUptime.0 -> HOST-RESOURCES-MIB::hrSystemUptime.0
  • .1.3.6.1.2.1.1.6.0 -> .1.3.6.1.2.1.1.6.0

Установка MIB

Если у Вас есть требуемый MIB-файл, то достаточно скопировать его в директорию /root/.snmp/mibs, предварительно создав её:

# mkdir -p /root/.snmp/mibs
# cp your-mibs-file.mib /root/.snmp/mibs

После этого проверьте правильность работы snmptranslate с каким-либо известным OID:

# snmptranslate -On yourOid

Шаблоны

Для описания устройств удобно (хотя и не обязательно) использовать шаблоны. Шаблон (тип устройства) - это внешний конфигурационный файл (располагается в /usr/share/wb-mqtt-snmp/templates и имеет имя config-[device-type-name].json, например, config-test-snmp.json), в котором содержится базовое описание устройства (например, имя сообщества SNMP) и базовое описание всех его каналов.

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

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

Пример

Шаблон config-my-device.json:

{
    "device_type": "my-device",
    "community": "public",
    "channels": [
        {
            "name": "Channel 1",
            "oid": ".1.2.3.4.1"
        },
        {
            "name": "Channel 2",
            "oid": ".1.2.3.4.2",
            "poll_interval": 3000
        }
    ]
}

Конфигурационный файл:

{
    "devices": [
        {
            "name": "Device 1",
            "device_type": "my-device",
            "address": "192.168.0.5",
            "snmp_timeout": 1
        },
        {
            "name": "Device 2",
            "device_type": "my-device",
            "address": "my-device.example.org",
            "snmp_timeout": 5,
            "channels": [
                {
                    "name": "Channel 2",
                    "poll_interval": 10000
                }
            ]
        }
    ]
}

В данном случае мы описали один шаблон my-device, по которому определили два разных устройства Device 1 и Device 2 с одинаковым набором каналов.

Поскольку Device 1 находится в локальной сети, логично выставить ему небольшое значение таймаута, чтобы быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.

Device 2 - удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала Channel 2 здесь мы переопределяем интервал опроса на бОльший, чтобы снизить нагрузку на сеть.

Таким образом, шаблоны очень удобно использовать для описания группы однотипных устройств.

Список шаблонов

В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств (список будет расширяться):

Устройство Имя шаблона Протестировано Комментарии
Тестовый сервер Net-SNMP test-snmp Да адрес тестового сервера test.net-snmp.org
APC UPS apc-ups Нет
  • Требуется локально установленный PowerNet-MIB
  • Описание устройства такое же, как в wb-mqtt-apcsnmp