|
|
(не показаны 23 промежуточные версии 7 участников) |
Строка 1: |
Строка 1: |
| '''SNMP (Simple Network Management Protocol)''' - стандартный протокол для управления сетевыми устройствами в IP-сетях.
| | {{DISPLAYTITLE: SNMP}} |
|
| |
|
| Часто используется для обмена сервисной информацией с устройствами, представляя данные в виде отдельных переменных.
| | '''SNMP (Simple Network Management Protocol)''' — стандартный протокол для управления сетевыми устройствами в IP-сетях. Он часто используется для обмена сервисной информацией с устройствами и представляет данные в виде отдельных переменных. Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п. Подробнее о протоколе читайте в [https://ru.wikipedia.org/wiki/SNMP Wikipedia]. |
|
| |
|
| Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п.
| | Контроллер может:<br> |
| | | * '''собирать''' информацию по SNMP с других устройств с помощью [[Драйвер_SNMP |Драйвера SNMP]] <br> |
| В Wiren Board добавлен драйвер для получения данных от SNMP-устройств. Драйвер написан на Go.
| | * '''отправлять''' данные другим устройствам с помощью [[Агент_SNMP |Агента SNMP]]. |
| | |
| = Установка и настройка на контроллере =
| |
| | |
| == Установка ==
| |
| | |
| '''Внимание:''' на сегодняшний день пакет находится в тестировании, потому недоступен в основном репозитории.
| |
| | |
| Для установки пакета скачайте последнюю версию из репозитория ([https://github.com/contactless/wb-mqtt-snmp/releases ссылка]), после чего установите её вместе с зависимостями:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| # apt-get update && apt-get install snmp && dpkg -i wb-mqtt-snmp_1.0_armel.deb
| |
| </syntaxhighlight>
| |
| | |
| <!--
| |
| | |
| Сначала нужно установить пакет wb-mqtt-snmp. В консоли устройства вводим
| |
| | |
| <syntaxhighlight lang="bash">
| |
| # apt-get update && apt-get install wb-mqtt-snmp
| |
| </syntaxhighlight>
| |
| -->
| |
| | |
| == Настройка ==
| |
| | |
| Структура конфигурации очень похожа на wb-mqtt-serial.
| |
| | |
| Пример конфигурационного файла (/etc/wb-mqtt-snmp.conf):
| |
| | |
| <syntaxhighlight lang="json">
| |
| {
| |
| "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"
| |
| }
| |
| ]
| |
| }
| |
| </syntaxhighlight> | |
| | |
| Рассмотрим его несколько подробней.
| |
| | |
| === Файл конфигурации ===
| |
| | |
| * '''debug''' - флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию - false); | |
| * '''num_workers''' - максимальное количество одновременно устанавливаемых SNMP-соединений.
| |
| ** Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Однако, увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В общем случае можно оставить значение по умолчанию (4).
| |
| * '''devices''' - список опрашиваемых устройств.
| |
| | |
| ==== Описание устройства ====
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию
| |
| |-
| |
| | '''name ''' || string || Имя устройства || Нет || SNMP [address]_[community]
| |
| |- | |
| | '''id''' || string || ID устройства в MQTT || Нет || snmp_[address]_[community]
| |
| |-
| |
| | '''address''' || string || Сетевой адрес устройства || style="background: #22EE44;" | Да || -
| |
| |-
| |
| | '''device_type''' || string || Тип устройства (нужен для загрузки шаблона) || Нет || -
| |
| |-
| |
| | '''enabled''' || bool || Включить устройство в опрос? || Нет || true
| |
| |-
| |
| | '''community''' || string || Имя сообщества SNMP || style="background: #22EE44;" | Да || -
| |
| |-
| |
| | '''oid_prefix''' || string || Префикс (имя MIB) для текстовых OID каналов, где оный не указан явно || Нет || -
| |
| |-
| |
| | '''snmp_version''' || string || Версия SNMP (на сегодняшний день поддерживается только 2с) || Нет || 2c
| |
| |-
| |
| | '''snmp_timeout''' || integer || Время ожидания ответа (в секундах) || Нет || 5
| |
| |-
| |
| | '''poll_interval''' || integer || Минимальное время опроса для каждого канала по умолчанию || Нет || -
| |
| |-
| |
| | '''channels''' || array || Описание каналов устройства (переменных SNMP) || Нет || -
| |
| |-
| |
| |}
| |
| | |
| ==== Описание каналов ====
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию
| |
| |-
| |
| | '''name''' || string || Имя канала || style="background: #22EE44;" | Да || -
| |
| |-
| |
| | '''oid''' || string || OID в числовом или текстовом виде || style="background: #22EE44;" | Да || -
| |
| |-
| |
| | '''enabled''' || boolean || Включить канал в опрос? || Нет || true
| |
| |-
| |
| | '''control_type''' || string || Тип данных (согласно [https://github.com/contactless/homeui/blob/contactless/conventions.md 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 вручную с помощью команды
| |
| | |
| <syntaxhighlight lang="bash"> | |
| # snmptranslate -On yourOid
| |
| </syntaxhighlight>
| |
| | |
| Параметр '''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, предварительно создав её:
| |
| <syntaxhighlight lang="bash">
| |
| # mkdir -p /root/.snmp/mibs
| |
| # cp your-mibs-file.mib /root/.snmp/mibs
| |
| </syntaxhighlight>
| |
| | |
| После этого проверьте правильность работы snmptranslate с каким-либо известным OID:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| # snmptranslate -On yourOid
| |
| </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">
| |
| {
| |
| "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
| |
| }
| |
| ]
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| Конфигурационный файл:
| |
| <syntaxhighlight lang="json">
| |
| {
| |
| "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
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| В данном случае мы описали один шаблон my-device, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов.
| |
| | |
| Поскольку ''Device 1'' находится в локальной сети, логично выставить ему небольшое значение таймаута, чтобы быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.
| |
| | |
| ''Device 2'' - удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем
| |
| интервал опроса на бОльший, чтобы снизить нагрузку на сеть.
| |
| | |
| Таким образом, шаблоны очень удобно использовать для описания группы однотипных устройств.
| |
| | |
| = Список шаблонов =
| |
| | |
| В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств (список будет расширяться):
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! Устройство !! Имя шаблона !! Протестировано !! Комментарии
| |
| |-
| |
| | Тестовый сервер Net-SNMP || test-snmp || style="background: #22EE44;" | Да || адрес тестового сервера test.net-snmp.org
| |
| |-
| |
| | APC UPS || apc-ups || Нет ||
| |
| * Требуется локально установленный PowerNet-MIB
| |
| * Описание устройства такое же, как в wb-mqtt-apcsnmp
| |
| |-
| |
| |}
| |