|
|
(не показано 5 промежуточных версий 3 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE: Драйвер SNMP}} | | {{DISPLAYTITLE: SNMP}} |
|
| |
|
| '''SNMP (Simple Network Management Protocol)''' — стандартный протокол для управления сетевыми устройствами в IP-сетях. Он часто используется для обмена сервисной информацией с устройствами и представляет данные в виде отдельных переменных. Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п. Подробнее о протоколе читайте в [https://ru.wikipedia.org/wiki/SNMP Wikipedia]. | | '''SNMP (Simple Network Management Protocol)''' — стандартный протокол для управления сетевыми устройствами в IP-сетях. Он часто используется для обмена сервисной информацией с устройствами и представляет данные в виде отдельных переменных. Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п. Подробнее о протоколе читайте в [https://ru.wikipedia.org/wiki/SNMP Wikipedia]. |
|
| |
|
| В контроллер Wiren Board добавлен драйвер для ''получения'' данных от SNMP-устройств.
| | Контроллер может:<br> |
| Но вы можете настроить и ''отправку'' данных, для этого нужно [[#Контроллер как источник SNMP | установить и настроить]] демон <code>snmpd</code>.
| | * '''собирать''' информацию по SNMP с других устройств с помощью [[Драйвер_SNMP |Драйвера SNMP]] <br> |
| | | * '''отправлять''' данные другим устройствам с помощью [[Агент_SNMP |Агента SNMP]]. |
| = Установка и настройка на контроллере =
| |
| Для установки и настройки подключитесь к контроллеру по [[SSH]].
| |
| | |
| == Установка ==
| |
| Сначала нужно установить пакет <code>wb-mqtt-snmp</code>, для этого введите в консоли команды:
| |
| | |
| <syntaxhighlight lang="bash">
| |
| apt update
| |
| apt install wb-mqtt-snmp
| |
| </syntaxhighlight>
| |
| | |
| == Настройка ==
| |
| Структура конфигурации похожа на [[Драйвер wb-mqtt-serial | wb-mqtt-serial]].
| |
| | |
| Пример конфигурационного файла <code>/etc/wb-mqtt-snmp.conf</code>:
| |
| | |
| <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>
| |
| | |
| О структуре файла и назначении параметров читайте ниже.
| |
| | |
| === Файл конфигурации ===
| |
| * <code>debug</code> — флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию — false).
| |
| * <code>num_workers</code> — максимальное количество одновременно устанавливаемых SNMP-соединений. Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Но помните, что увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В большинстве случаев можно оставить значение по умолчанию — 4.
| |
| * <code>devices</code> — список опрашиваемых устройств. | |
| | |
| ==== Описание устройства ====
| |
| {| 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/wirenboard/homeui/blob/master/conventions.md Conventions] || Нет || text
| |
| |-
| |
| | '''units''' || string || Обозначение единиц измерения, для <code>control_type == value</code> || Нет || -
| |
| |-
| |
| | '''scale''' || float || Множитель, для числовых значений || Нет || 1.0
| |
| |-
| |
| | '''poll_interval''' || int || Минимальный интервал опроса канала, в мс || Нет || <code>poll_interval</code> из описания устройства, либо 1000
| |
| |-
| |
| |}
| |
| | |
| == Преобразование OID ==
| |
| При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые:
| |
| * OID числовой: начинается с точки: <code>.1.2.3.4</code> — преобразование не происходит.
| |
| * OID текстовый: например, <code>SNMPv2-MIB::sysName.0</code> — происходит преобразование в числовой. В системе должен быть установлен MIB, который содержит описание этой переменной.
| |
| | |
| Преобразование имен происходит с помощью вызова утилиты <code>snmptranslate</code>, так что можно проверить наличие MIB вручную с [[#Проверка работы преобразования | помощью команды]].
| |
| | |
| Параметр <code>oid_prefix</code> в описании устройства позволяет опустить имя MIB (префикс: ''SNMPv2-MIB''::sysName.0). В этом случае префикс из <code>oid_prefix</code> будет автоматически присоединён ко всем OID каналам устройства, где он явно не указан. Например, при <code>oid_prefix</code> равном ''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-файл, то достаточно скопировать его в директорию <code>/root/.snmp/mibs</code>:
| |
| <syntaxhighlight lang="bash">
| |
| # cp your-mibs-file.mib /root/.snmp/mibs
| |
| </syntaxhighlight>
| |
| | |
| Если на контроллере нет директории <code>/root/.snmp/mibs</code> — создайте ее:
| |
| <syntaxhighlight lang="bash">
| |
| # mkdir -p /root/.snmp/mibs
| |
| </syntaxhighlight>
| |
| | |
| После копирования MIB-файла [[#Проверка работы преобразования | проверьте правильность преобразования]] <code>snmptranslate</code> с каким-либо известным OID.
| |
| | |
| === Проверка работы преобразования ===
| |
| Для проверки введите команду, где <code>yourOid</code> — известный вам OID:
| |
| <syntaxhighlight lang="bash">
| |
| # snmptranslate -On yourOid
| |
| </syntaxhighlight>
| |
| | |
| == Шаблоны ==
| |
| Для описания устройств не обязательно, но удобно использовать ''шаблоны''.
| |
| | |
| ''Шаблон (тип устройства)'' — это внешний конфигурационный файл с именем <code>config-[device-type-name].json</code>, который располагается в <code>/usr/share/wb-mqtt-snmp/templates</code>. Например, <code>/usr/share/wb-mqtt-snmp/templates/config-test-snmp.json</code>. В файле шаблона содержится описание устройства: имя сообщества SNMP и базовое описание всех его каналов.
| |
| | |
| Для использования шаблона в описании устройства в конфигурационном файле укажите поле <code>device_type</code>. Среди всех представленных шаблонов будет выбран тот, где такое же значение <code>device_type</code> и все неопределенные в конфигурационном файле поля примут значения из шаблона.
| |
| | |
| Точно так же это работает с каналами. Сравнение каналов происходит по обязательному полю <code>name</code>: если имя канала из конфигурационного файла совпадёт с именем канала в шаблоне, из шаблона будут взяты все неопределенные значения.
| |
| | |
| === Пример ===
| |
| Шаблон <code>config-my-device.json</code>:
| |
| | |
| <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>
| |
| | |
| В примере мы описали один шаблон <code>my-device</code>, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов.
| |
| | |
| Поскольку ''Device 1'' находится в локальной сети, то логично выставить ему небольшое значение таймаута — это позволит быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.
| |
| | |
| ''Device 2'' — удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем интервал опроса на б''о''льший — это снизит нагрузку на сеть.
| |
| | |
| Таким образом, шаблоны удобно использовать для описания группы однотипных устройств.
| |
| | |
| = Список шаблонов =
| |
| В поставке <code>wb-mqtt-snmp</code> прилагается набор шаблонов для типовых устройств:
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! Устройство !! Имя шаблона !! Протестировано !! Комментарии
| |
| |-
| |
| | Тестовый сервер Net-SNMP || test-snmp || style="background: #22EE44;" | Да || адрес тестового сервера test.net-snmp.org
| |
| |-
| |
| | APC UPS || apc-ups || Нет ||
| |
| * Требуется локально установленный PowerNet-MIB
| |
| * Описание устройства такое же, как в <code>wb-mqtt-apcsnmp</code>
| |
| |-
| |
| |}
| |
| | |
| = Контроллер как источник SNMP =
| |
| Иногда нужно получать какие-то параметры из контроллера по SNMP, например, значения топиков.
| |
| | |
| == Установка и предварительная настройка пакетов ==
| |
| | |
| Обновите источники и установите пакеты <code>snmp</code> и <code>snmpd</code>:
| |
| <syntaxhighlight lang="bash">
| |
| apt update && apt-get install snmp snmpd -y
| |
| </syntaxhighlight>
| |
| | |
| Отредактируйте основной файл конфигурации демона:
| |
| <syntaxhighlight lang="bash">
| |
| mcedit /etc/snmp/snmpd.conf
| |
| </syntaxhighlight>
| |
| | |
| В секцию <code># ACCESS CONTROL</code> допишите строчку:
| |
| <syntaxhighlight lang="bash">
| |
| view systemonly included .1.3.6.1.4.1.2021.8
| |
| </syntaxhighlight>
| |
| | |
| А в конец файла допишите ссылку на скрипт:
| |
| <syntaxhighlight lang="bash">
| |
| extend .1.3.6.1.4.1.2021.8 tt /var/lib/snmp/mqtt-snmp.sh
| |
| </syntaxhighlight>
| |
| | |
| == Добавление скрипта ==
| |
| | |
| Отредактируйте скрипт <code>/var/lib/snmp/mqtt-snmp.sh</code>
| |
| <syntaxhighlight lang="bash">
| |
| mcedit /var/lib/snmp/mqtt-snmp.sh
| |
| </syntaxhighlight>
| |
| | |
| B приведите его к виду:
| |
| <syntaxhighlight lang="bash">
| |
| #!/bin/sh
| |
| echo "mosquitto topics"
| |
| # voltage Vout
| |
| echo $(/usr/bin/mosquitto_sub -C 1 -t "/devices/wb-adc/controls/5Vout")
| |
| # voltage Vin
| |
| echo $(/usr/bin/mosquitto_sub -C 1 -t "/devices/wb-adc/controls/Vin")
| |
| </syntaxhighlight>
| |
| | |
| Установите на права:
| |
| <syntaxhighlight lang="bash">
| |
| chmod a+rx /var/lib/snmp/mqtt-snmp.sh
| |
| </syntaxhighlight>
| |
| | |
| Теперь добавляем в этот скрипт нужные топики, или создаем несколько скриптов с разными наборами. Если вы создаете несколько скриптов, не забудьте [[#Установка и предварительная настройка пакетов | дописать ссылки на них в конец файла]] <code>/etc/snmp/snmpd.conf</code>.
| |
| | |
| После сохранения изменений в скрипте, перезапустите демон <code>snmpd</code>:
| |
| <syntaxhighlight lang="bash">
| |
| systemctl restart snmpd && systemctl status snmpd
| |
| </syntaxhighlight>
| |
| | |
| Можете протестировать:
| |
| <syntaxhighlight lang="bash">
| |
| snmpwalk -On -v2c -c public 127.0.0.1 1.3.6.1.4.1.2021.8.4
| |
| </syntaxhighlight>
| |