SNMP/en: различия между версиями
FuzzyBot (обсуждение | вклад) м (FuzzyBot переименовал страницу Драйвер SNMP/en в SNMP/en без оставления перенаправления: Часть переводимой страницы Драйвер SNMP.) |
(Новая страница: « SNMP driver») |
||
(не показано 39 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
'''SNMP (Simple Network Management Protocol)''' - стандартный протокол для управления сетевыми устройствами в IP-сетях. | |||
Часто используется для обмена сервисной информацией с устройствами, представляя данные в виде отдельных переменных. | |||
Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п. | |||
В Wiren Board добавлен драйвер для получения данных от SNMP-устройств. Драйвер написан на Go. | |||
= Установка и настройка на контроллере = | |||
= | == Установка == | ||
Сначала нужно установить пакет wb-mqtt-snmp. В консоли устройства вводим | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Строка 19: | Строка 18: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Настройка == | ||
Структура конфигурации очень похожа на wb-mqtt-serial. | |||
Пример конфигурационного файла (/etc/wb-mqtt-snmp.conf): | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
Строка 61: | Строка 60: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Рассмотрим его несколько подробней. | |||
=== | === Файл конфигурации === | ||
*''' debug''' - | * '''debug''' - флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию - false); | ||
*'''num_workers''' - | * '''num_workers''' - максимальное количество одновременно устанавливаемых SNMP-соединений. | ||
** | ** Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Однако, увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В общем случае можно оставить значение по умолчанию (4). | ||
*'''devices''' - | * '''devices''' - список опрашиваемых устройств. | ||
==== | ==== Описание устройства ==== | ||
{| 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: | Строка 134: | ||
</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: | Строка 142: | ||
* .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: | Строка 150: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
После этого проверьте правильность работы snmptranslate с каким-либо известным OID: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Строка 156: | Строка 156: | ||
</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: | Строка 189: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Конфигурационный файл: | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Строка 212: | Строка 215: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В данном случае мы описали один шаблон my-device, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов. | |||
Поскольку ''Device 1'' находится в локальной сети, логично выставить ему небольшое значение таймаута, чтобы быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона. | |||
Device 2 | ''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 | ||
|- | |- | ||
|} | |} |
Версия 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 | Нет |
|