16 244
правки
Brainroot (обсуждение | вклад) |
м (Орфография, текст, оформление) |
||
Строка 1: | Строка 1: | ||
'''SNMP (Simple Network Management Protocol)''' — стандартный протокол для управления сетевыми устройствами в IP-сетях. Он часто используется для обмена сервисной информацией с устройствами и представляет данные в виде отдельных переменных. Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п. Подробнее о протоколе читайте в [https://ru.wikipedia.org/wiki/SNMP Wikipedia]. | |||
'''SNMP (Simple Network Management Protocol)''' | |||
В контроллер Wiren Board добавлен драйвер для ''получения'' данных от SNMP-устройств. | |||
Но вы можете настроить и ''отправку'' данных, для этого нужно [[#Контроллер как источник SNMP | установить и настроить]] демон <code>snmpd</code>. | |||
= Установка и настройка на контроллере = | |||
Для установки и настройки подключитесь к контроллеру по [[SSH]]. | |||
< | == Установка == | ||
Сначала нужно установить пакет <code>wb-mqtt-snmp</code>, для этого введите в консоли команды: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
apt update | apt update | ||
Строка 26: | Строка 15: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Настройка == | == Настройка == | ||
Структура конфигурации похожа на [[Драйвер wb-mqtt-serial | wb-mqtt-serial]]. | |||
Структура конфигурации | |||
Пример конфигурационного файла <code>/etc/wb-mqtt-snmp.conf</code>: | |||
Пример конфигурационного файла | |||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Строка 71: | Строка 56: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
О структуре файла и назначении параметров читайте ниже. | |||
=== | === Файл конфигурации === | ||
* <code>debug</code> — флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию — false). | |||
* <code>num_workers</code> — максимальное количество одновременно устанавливаемых SNMP-соединений. Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Но помните, что увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В большинстве случаев можно оставить значение по умолчанию — 4. | |||
* <code>devices</code> — список опрашиваемых устройств. | |||
==== Описание устройства ==== | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Строка 95: | Строка 74: | ||
| '''address''' || string || Сетевой адрес устройства || style="background: #22EE44;" | Да || - | | '''address''' || string || Сетевой адрес устройства || style="background: #22EE44;" | Да || - | ||
|- | |- | ||
| '''device_type''' || string || Тип устройства | | '''device_type''' || string || Тип устройства, нужен для загрузки шаблона || Нет || - | ||
|- | |- | ||
| '''enabled''' || bool || | | '''enabled''' || bool || Включает или выключает опрос устройства || Нет || true | ||
|- | |- | ||
| '''community''' || string || Имя сообщества SNMP || style="background: #22EE44;" | Да || - | | '''community''' || string || Имя сообщества SNMP || style="background: #22EE44;" | Да || - | ||
|- | |- | ||
| '''oid_prefix''' || string || Префикс (имя MIB) для текстовых OID каналов, где | | '''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 || Минимальное время опроса для каждого канала по умолчанию || Нет || - | ||
Строка 113: | Строка 92: | ||
|} | |} | ||
==== Описание каналов ==== | ==== Описание каналов ==== | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Строка 124: | Строка 101: | ||
| '''oid''' || string || OID в числовом или текстовом виде || style="background: #22EE44;" | Да || - | | '''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 || Обозначение единиц измерения, для <code>control_type == value</code> || Нет || - | ||
|- | |- | ||
| '''scale''' || float || Множитель | | '''scale''' || float || Множитель, для числовых значений || Нет || 1.0 | ||
|- | |- | ||
| '''poll_interval''' || int || Минимальный интервал опроса канала | | '''poll_interval''' || int || Минимальный интервал опроса канала, в мс || Нет || <code>poll_interval</code> из описания устройства, либо 1000 | ||
|- | |- | ||
|} | |} | ||
== Преобразование OID == < | == Преобразование 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"> | <syntaxhighlight lang="bash"> | ||
# | # cp your-mibs-file.mib /root/.snmp/mibs | ||
</syntaxhighlight> | </syntaxhighlight> | ||
< | Если на контроллере нет директории <code>/root/.snmp/mibs</code> — создайте ее: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# mkdir -p /root/.snmp/mibs | # mkdir -p /root/.snmp/mibs | ||
</syntaxhighlight> | </syntaxhighlight> | ||
После копирования MIB-файла [[#Проверка работы преобразования | проверьте правильность преобразования]] <code>snmptranslate</code> с каким-либо известным OID. | |||
< | === Проверка работы преобразования === | ||
Для проверки введите команду, где <code>yourOid</code> — известный вам OID: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
# snmptranslate -On yourOid | # snmptranslate -On yourOid | ||
</syntaxhighlight> | </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"> | <syntaxhighlight lang="json"> | ||
{ | { | ||
Строка 218: | Строка 176: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Конфигурационный файл: | Конфигурационный файл: | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
Строка 245: | Строка 202: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В примере мы описали один шаблон <code>my-device</code>, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов. | |||
В | |||
Поскольку ''Device 1'' находится в локальной сети, то логично выставить ему небольшое значение таймаута — это позволит быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона. | |||
''Device | |||
''Device 2'' — удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем интервал опроса на б''о''льший — это снизит нагрузку на сеть. | |||
Таким образом, шаблоны удобно использовать для описания группы однотипных устройств. | |||
= Список шаблонов = | |||
В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств | В поставке <code>wb-mqtt-snmp</code> прилагается набор шаблонов для типовых устройств: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Строка 272: | Строка 221: | ||
| APC UPS || apc-ups || Нет || | | APC UPS || apc-ups || Нет || | ||
* Требуется локально установленный PowerNet-MIB | * Требуется локально установленный PowerNet-MIB | ||
* Описание устройства такое же, как в wb-mqtt-apcsnmp | * Описание устройства такое же, как в <code>wb-mqtt-apcsnmp</code> | ||
|- | |- | ||
|} | |} | ||
= Контроллер как источник SNMP = | = Контроллер как источник SNMP = | ||
Иногда нужно | Иногда нужно получать какие-то параметры из контроллера по SNMP, например, значения топиков. | ||
== Установка и предварительная настройка пакетов == | == Установка и предварительная настройка пакетов == | ||
Обновите источники и установите пакеты <code>snmp</code> и <code>snmpd</code>: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
apt update && apt-get install snmp snmpd -y | apt update && apt-get install snmp snmpd -y | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Отредактируйте основной файл конфигурации демона: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
mcedit /etc/snmp/snmpd.conf | mcedit /etc/snmp/snmpd.conf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
В секцию | В секцию <code># ACCESS CONTROL</code> допишите строчку: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
view systemonly included .1.3.6.1.4.1.2021.8 | view systemonly included .1.3.6.1.4.1.2021.8 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
А в конец файла допишите ссылку на скрипт: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
extend .1.3.6.1.4.1.2021.8 tt /var/lib/snmp/mqtt-snmp.sh | extend .1.3.6.1.4.1.2021.8 tt /var/lib/snmp/mqtt-snmp.sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Добавление скрипта == | == Добавление скрипта == | ||
Отредактируйте скрипт <code>/var/lib/snmp/mqtt-snmp.sh</code> | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
mcedit /var/lib/snmp/mqtt-snmp.sh | mcedit /var/lib/snmp/mqtt-snmp.sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
B приведите его к виду: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#!/bin/sh | #!/bin/sh | ||
Строка 319: | Строка 267: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Установите на права: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
chmod a+rx /var/lib/snmp/mqtt-snmp.sh | chmod a+rx /var/lib/snmp/mqtt-snmp.sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Теперь добавляем в этот скрипт нужные топики, или создаем несколько скриптов с разными наборами. Если вы создаете несколько скриптов, не забудьте [[#Установка и предварительная настройка пакетов | дописать ссылки на них в конец файла]] <code>/etc/snmp/snmpd.conf</code>. | |||
После сохранения изменений в скрипте, перезапустите демон <code>snmpd</code>: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl restart snmpd && systemctl status snmpd | systemctl restart snmpd && systemctl status snmpd | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Можете протестировать: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
snmpwalk -On -v2c -c public 127.0.0.1 1.3.6.1.4.1.2021.8.4 | snmpwalk -On -v2c -c public 127.0.0.1 1.3.6.1.4.1.2021.8.4 | ||
</syntaxhighlight> | </syntaxhighlight> |