SNMP/en: различия между версиями
FuzzyBot (обсуждение | вклад) м (FuzzyBot переименовал страницу Драйвер SNMP/en в SNMP/en без оставления перенаправления: Часть переводимой страницы Драйвер SNMP.) |
(Новая страница: «*''' 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); *'''num_wo…») |
||
(не показано 26 промежуточных версий 1 участника) | |||
Строка 70: | Строка 70: | ||
*'''devices''' - list of devices to be polled. | *'''devices''' - list of devices to be polled. | ||
==== | ==== Описание устройства ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию | ||
|- | |- | ||
| '''name ''' || string || | | '''name ''' || string || Имя устройства || Нет || SNMP [address]_[community] | ||
|- | |- | ||
| '''id''' || string || | | '''id''' || string || ID устройства в MQTT || Нет || snmp_[address]_[community] | ||
|- | |- | ||
| '''address''' || string || | | '''address''' || string || Сетевой адрес устройства || style="background: #22EE44;" | Да || - | ||
|- | |- | ||
| '''device_type''' || string || | | '''device_type''' || string || Тип устройства (нужен для загрузки шаблона) || Нет || - | ||
|- | |- | ||
| '''enabled''' || bool || | | '''enabled''' || bool || Включить устройство в опрос? || Нет || true | ||
|- | |- | ||
| '''community''' || string || | | '''community''' || string || Имя сообщества SNMP || style="background: #22EE44;" | Да || - | ||
|- | |- | ||
| '''oid_prefix''' || string || | | '''oid_prefix''' || string || Префикс (имя MIB) для текстовых OID каналов, где оный не указан явно || Нет || - | ||
|- | |- | ||
| '''snmp_version''' || string || SNMP | | '''snmp_version''' || string || Версия SNMP (на сегодняшний день поддерживается только 2с) || Нет || 2c | ||
|- | |- | ||
| '''snmp_timeout''' || integer || | | '''snmp_timeout''' || integer || Время ожидания ответа (в секундах) || Нет || 5 | ||
|- | |- | ||
| '''poll_interval''' || integer || | | '''poll_interval''' || integer || Минимальное время опроса для каждого канала по умолчанию || Нет || - | ||
|- | |- | ||
| '''channels''' || array || | | '''channels''' || array || Описание каналов устройства (переменных SNMP) || Нет || - | ||
|- | |- | ||
|} | |} | ||
==== | ==== Описание каналов ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию | ||
|- | |- | ||
| '''name''' || string || | | '''name''' || string || Имя канала || style="background: #22EE44;" | Да || - | ||
|- | |- | ||
| '''oid''' || string || OID | | '''oid''' || string || OID в числовом или текстовом виде || style="background: #22EE44;" | Да || - | ||
|- | |- | ||
| '''enabled''' || boolean || | | '''enabled''' || boolean || Включить канал в опрос? || Нет || true | ||
|- | |- | ||
| '''control_type''' || string || | | '''control_type''' || string || Тип данных (согласно [https://github.com/contactless/homeui/blob/contactless/conventions.md Conventions]) || Нет || text | ||
|- | |- | ||
| '''units''' || string || | | '''units''' || string || Обозначение единиц измерения (для control_type == value) || Нет || - | ||
|- | |- | ||
| '''scale''' || float || | | '''scale''' || float || Множитель (для числовых значений) || Нет || 1.0 | ||
|- | |- | ||
| '''poll_interval''' || int || | | '''poll_interval''' || int || Минимальный интервал опроса канала (в мс) || Нет || poll_interval из описания устройства, либо 1000 | ||
|- | |- | ||
|} | |} | ||
== OID | == Преобразование OID == | ||
При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые. | |||
Если OID представлен в числовом виде (начинается с точки: .1.2.3.4), никакого преобразования не происходит. | |||
Если OID представлен в текстовом виде (например, SNMPv2-MIB::sysName.0), необходимо, чтобы в системе был установлен соответствующий MIB, содержащий описание этой переменной. | |||
Преобразование имён происходит с помощью вызова утилиты snmptranslate, так что можно проверить наличие MIB вручную с помощью команды | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Строка 135: | Строка 135: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Параметр '''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 | ==== Установка MIB ==== | ||
Если у Вас есть требуемый MIB-файл, то достаточно скопировать его в директорию /root/.snmp/mibs, предварительно создав её: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# mkdir -p /root/.snmp/mibs | # mkdir -p /root/.snmp/mibs | ||
Строка 150: | Строка 151: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
После этого проверьте правильность работы snmptranslate с каким-либо известным OID: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Строка 156: | Строка 157: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Шаблоны == | ||
Для описания устройств удобно (хотя и не обязательно) использовать ''шаблоны''. ''Шаблон (тип устройства)'' - это внешний конфигурационный файл (располагается в /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: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
Строка 186: | Строка 190: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Конфигурационный файл: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Строка 212: | Строка 216: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В данном случае мы описали один шаблон my-device, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов. | |||
Поскольку ''Device 1'' находится в локальной сети, логично выставить ему небольшое значение таймаута, чтобы быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона. | |||
''Device 2'' - удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем | |||
интервал опроса на бОльший, чтобы снизить нагрузку на сеть. | |||
Таким образом, шаблоны очень удобно использовать для описания группы однотипных устройств. | |||
= Список шаблонов = | |||
В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств (список будет расширяться): | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Устройство !! Имя шаблона !! Протестировано !! Комментарии | ||
|- | |- | ||
| | | Тестовый сервер Net-SNMP || test-snmp || style="background: #22EE44;" | Да || адрес тестового сервера test.net-snmp.org | ||
|- | |- | ||
| APC UPS || apc-ups || Нет || | | APC UPS || apc-ups || Нет || | ||
* | * Требуется локально установленный PowerNet-MIB | ||
* | * Описание устройства такое же, как в wb-mqtt-apcsnmp | ||
|- | |- | ||
|} | |} |
Версия 13:05, 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.
A driver has been added to the Wiren Board to receive data from SNMP devices. The driver is written in Go.
Installation and configuration on the controller
Installation
First you need to install the wb-mqtt-snmp package. In the device console, enter
# apt-get update
# apt-get install wb-mqtt-snmp
Settings
The configuration structure is very similar to wb-mqtt-serial.
Example of the configuration file (/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"
}
]
}
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);
- num_workers - maximum number of SNMP connections to be established at the same time.
- 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).
- devices - list of devices to be polled.
Описание устройства
Имя параметра | Тип | Описание | Обязательный | Значение по умолчанию |
---|---|---|---|---|
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 | Нет |
|