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

Материал из Wiren Board
м (FuzzyBot переименовал страницу Драйвер SNMP/en в SNMP/en без оставления перенаправления: Часть переводимой страницы Драйвер SNMP.)
(Новая страница: «Protocol support is found in network switches, routers, uninterruptible power supply (UPS) systems, servers, etc.»)
(не показано 36 промежуточных версий 1 участника)
Строка 6: Строка 6:
Protocol support is found in network switches, routers, uninterruptible power supply (UPS) systems, servers, etc.
Protocol support is found in network switches, routers, uninterruptible power supply (UPS) systems, servers, etc.


A driver has been added to the Wiren Board to receive data from SNMP devices. The driver is written in Go.
В Wiren Board добавлен драйвер для получения данных от SNMP-устройств. Драйвер написан на Go.


=Installation and configuration on the controller=
= Установка и настройка на контроллере =


===Installation===
== Установка ==


First you need to install the wb-mqtt-snmp package. In the device console, enter
Сначала нужно установить пакет wb-mqtt-snmp. В консоли устройства вводим


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 19: Строка 19:
</syntaxhighlight>
</syntaxhighlight>


=== Settings ===
== Настройка ==


The configuration structure is very similar to wb-mqtt-serial.
Структура конфигурации очень похожа на wb-mqtt-serial.


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


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Строка 61: Строка 61:
</syntaxhighlight>
</syntaxhighlight>


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


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


*''' debug''' - flag to enable debug mode. If true, then in the process of the daemon in the log file will be put debug information (default is false);
* '''debug''' - флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию - false);
*'''num_workers''' - maximum number of SNMP connections to be established at the same time.
* '''num_workers''' - максимальное количество одновременно устанавливаемых SNMP-соединений.
**If many SNMP devices are being polled, increasing this setting may speed up the polling. However, increasing this setting also increases the maximum load on the network. In General, you can leave the default value (4).
** Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Однако, увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В общем случае можно оставить значение по умолчанию (4).
*'''devices''' - list of devices to be polled.
* '''devices''' - список опрашиваемых устройств.


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


{| class="wikitable"
{| class="wikitable"
|-
|-
! Parameter name !! Type !! Description !! Required !! Default
! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию
 
|-
|-
| '''name ''' || string || device name || No || SNMP [address]_[community]
| '''name ''' || string || Имя устройства || Нет || SNMP [address]_[community]
|-
|-
| '''id''' || string || device ID in MQTT || No || snmp_[address]_[community]
| '''id''' || string || ID устройства в MQTT || Нет || snmp_[address]_[community]
|-
|-
| '''address''' || string || Network address of the device || style="background: #22EE44;" | Yes || -
| '''address''' || string || Сетевой адрес устройства || style="background: #22EE44;" | Да || -
|-
|-
| '''device_type''' || string || Type of device (required for downloading the template) || No || -
| '''device_type''' || string || Тип устройства (нужен для загрузки шаблона) || Нет || -
|-
|-
| '''enabled''' || bool || do you want to include the device in the poll? || No || true
| '''enabled''' || bool || Включить устройство в опрос? || Нет || true
|-
|-
| '''community''' || string || community name SNMP || style="background: #22EE44;" | Yes || -
| '''community''' || string || Имя сообщества SNMP || style="background: #22EE44;" | Да || -
|-
|-
| '''oid_prefix''' || string || Prefix (MIB name) for text OID channels where the prefix is explicitly specified  || No || -
| '''oid_prefix''' || string || Префикс (имя MIB) для текстовых OID каналов, где оный не указан явно || Нет || -
|-
|-
| '''snmp_version''' || string || SNMP version (currently only 2C is supported ) || No|| 2c
| '''snmp_version''' || string || Версия SNMP (на сегодняшний день поддерживается только 2с) || Нет || 2c
|-
|-
| '''snmp_timeout''' || integer || response timeout (in seconds) || No || 5
| '''snmp_timeout''' || integer || Время ожидания ответа (в секундах) || Нет || 5
|-
|-
| '''poll_interval''' || integer || Minimum polling time for each channel by default || No || -
| '''poll_interval''' || integer || Минимальное время опроса для каждого канала по умолчанию || Нет || -
|-
|-
| '''channels''' || array || channels description (SNMP variables) || No || -
| '''channels''' || array || Описание каналов устройства (переменных SNMP) || Нет || -
|-
|-
|}
|}


==== Channel description ====
==== Описание каналов ====


{| class="wikitable"
{| class="wikitable"
|-
|-
! Parameter name !! Type  !! Description !! Required !! Default
! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию
|-
|-
| '''name''' || string || channel name || style="background: #22EE44;" | Yes || -
| '''name''' || string || Имя канала || style="background: #22EE44;" | Да || -
|-
|-
| '''oid''' || string || OID in numeric or text form || style="background: #22EE44;" | Yes || -
| '''oid''' || string || OID в числовом или текстовом виде || style="background: #22EE44;" | Да || -
|-
|-
| '''enabled''' || boolean || Include the channel in poll? || No || true
| '''enabled''' || boolean || Включить канал в опрос? || Нет || true
|-
|-
| '''control_type''' || string || data type(according to [https://github.com/contactless/homeui/blob/contactless/conventions.md Conventions]) || No || text
| '''control_type''' || string || Тип данных (согласно [https://github.com/contactless/homeui/blob/contactless/conventions.md Conventions]) || Нет || text
|-
|-
| '''units''' || string || the string name of the units(for control_type == value) || No || -
| '''units''' || string || Обозначение единиц измерения (для control_type == value) || Нет || -
|-
|-
| '''scale''' || float || Multiplier (for numeric values) || No || 1.0
| '''scale''' || float || Множитель (для числовых значений) || Нет || 1.0
|-
|-
| '''poll_interval''' || int || the polling interval of the channel (in ms) || No || poll_interval from the description of the device, or  1000
| '''poll_interval''' || int || Минимальный интервал опроса канала (в мс) || Нет || poll_interval из описания устройства, либо 1000
|-
|-
|}
|}


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


When the daemon is started, an attempt is made to convert the text OIDs recorded in the configuration into numeric ones.
При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые.


If the OID is represented in numeric form (starts with the dot: .1.2.3.4), no conversion occurs.
Если OID представлен в числовом виде (начинается с точки: .1.2.3.4), никакого преобразования не происходит.


If the OID is in text form (for example, SNMPv2-MIB::sysName.0), it is necessary that the appropriate MIB containing the description of this variable is installed on the system. The name conversion is done by calling the snmptranslate utility, so you can check for a MIB manually by using the command
Если OID представлен в текстовом виде (например, SNMPv2-MIB::sysName.0), необходимо, чтобы в системе был установлен соответствующий MIB, содержащий описание этой переменной.
Преобразование имён происходит с помощью вызова утилиты snmptranslate, так что можно проверить наличие MIB вручную с помощью команды


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 135: Строка 135:
</syntaxhighlight>
</syntaxhighlight>


Oid_prefix parameter in the device description allows you to omit the name of the MIB (prefix; SNMPv2-MIB::sysName.0). In this case, the prefix from '''oid_prefix''' will be automatically attached to all OID channels of the device where the prefix is not explicitly specified. For example, if oid_prefix = SNMPv2-MIB:
Параметр '''oid_prefix''' в описании устройства позволяет опустить имя MIB (префикс; '''SNMPv2-MIB'''::sysName.0). В этом случае, префикс из '''oid_prefix''' будет автоматически
присоединён ко всем OID каналов устройства, где явно не указан префикс. Например, при '''oid_prefix''' = SNMPv2-MIB:


* sysName.0 -> '''SNMPv2-MIB::'''sysName.0
* sysName.0 -> '''SNMPv2-MIB::'''sysName.0
Строка 142: Строка 143:
* .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 installation ====
==== Установка MIB ====


If You have the required MIB file, just copy it to the /root/.snmp/mibs, by pre-creating it:
Если у Вас есть требуемый MIB-файл, то достаточно скопировать его в директорию /root/.snmp/mibs, предварительно создав её:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# mkdir -p /root/.snmp/mibs
# mkdir -p /root/.snmp/mibs
Строка 150: Строка 151:
</syntaxhighlight>
</syntaxhighlight>


After that, verify that snmptranslate works correctly with any known OID:
После этого проверьте правильность работы snmptranslate с каким-либо известным OID:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 156: Строка 157:
</syntaxhighlight>
</syntaxhighlight>


== Templates ==
== Шаблоны ==


It is convenient (though not necessary) to use templates to describe devices. The template (device type) is an external configuration file (located in /usr/share/wb-mqtt-snmp/templates and named config-[device-type-name].json, for example, config-test-snmp.json), which contains a basic description of the device (such as the SNMP community name) and a basic description of all its channels.
Для описания устройств удобно (хотя и не обязательно) использовать ''шаблоны''. ''Шаблон (тип устройства)'' - это внешний конфигурационный файл (располагается в /usr/share/wb-mqtt-snmp/templates  
и имеет имя config-[device-type-name].json, например, config-test-snmp.json), в котором содержится базовое описание устройства (например, имя сообщества SNMP) и базовое описание всех его каналов.


To use the template in the device description in the configuration file, specify the field ''''device_type''''. Among all presented templates, a template with the same ''device_type'' value will be selected, and all fields that were not defined in the configuration file will take values from the template.
Для использования шаблона в описании устройства в конфигурационном файле укажите поле "''device_type''". Среди всех представленных шаблонов будет выбран шаблон с таким же значением ''device_type'', при этом
все поля, которые не были определены в конфигурационном файле, примут значения из шаблона.


It works the same way with channels. The channels are compared by the mandatory field name; if the channel name from the configuration file matches the channel name in the template, all unspecified values will be taken from the template.
Точно так же это работает с каналами. Сравнение каналов происходит по обязательному полю ''name''; если имя канала из конфигурационного файла совпадёт с именем канала в шаблоне, из шаблона будут взяты
все неуказанные значения.


=== Example ===
=== Пример ===


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


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
Строка 186: Строка 190:
</syntaxhighlight>
</syntaxhighlight>


Configuration file:
Конфигурационный файл:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
Строка 212: Строка 216:
</syntaxhighlight>
</syntaxhighlight>


In this case, we have described one my-device template, by which we have defined two different devices Device 1 and Device 2 with the same set of channels.
В данном случае мы описали один шаблон my-device, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов.


In this case, we have described one my-device template, by which we have defined two different devices Device 1 and Device 2 with the same set of channels.
Поскольку ''Device 1'' находится в локальной сети, логично выставить ему небольшое значение таймаута, чтобы быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.


Since Device 1 is on the local network, it is logical to set it a small timeout value to quickly determine the malfunction of the device. All other settings are taken from the template.
''Device 2'' - удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем
интервал опроса на бОльший, чтобы снизить нагрузку на сеть.


Device 2 and the remote server, because for him, it is necessary to increase the timeout to not think the device is faulty if the delay of the package. What's more, for channel 2 here, we are redefining the polling interval to a larger one to reduce the load on the network.
Таким образом, шаблоны очень удобно использовать для описания группы однотипных устройств.


So, it is very convenient to use templates to describe a group of similar devices.
= Список шаблонов =


= Template list =
В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств (список будет расширяться):
 
The WB-mqtt-snmp package includes a set of templates for typical devices (the list will be expanded):


{| class="wikitable"
{| class="wikitable"
|-
|-
! Device !! Template !! Tested !! Comments
! Устройство !! Имя шаблона !! Протестировано !! Комментарии
|-
|-
| Test server  Net-SNMP || test-snmp || style="background: #22EE44;" | Yes || Test server address test.net-snmp.org
| Тестовый сервер Net-SNMP || test-snmp || style="background: #22EE44;" | Да || адрес тестового сервера test.net-snmp.org
|-
|-
| APC UPS || apc-ups || Нет ||  
| APC UPS || apc-ups || Нет ||  
* Requires locally installed PowerNet-MIB
* Требуется локально установленный PowerNet-MIB
*   The device description is the same as in wb-mqtt-apcsnmp
* Описание устройства такое же, как в wb-mqtt-apcsnmp
|-
|-
|}
|}

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

SNMP (Simple Network Management Protocol) is a standard Protocol for managing network devices in IP networks.

It is often used to exchange service information with devices, presenting data as separate variables.

Protocol support is found in network switches, routers, uninterruptible power supply (UPS) systems, servers, etc.

В 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