Агент SNMP

Материал из Wiren Board
(перенаправлено с «Агент SNMP»)

Это утверждённая версия страницы. Она же — наиболее свежая версия.

Контроллер как источник SNMP

Иногда нужно получать какие-то параметры из контроллера по SNMP, например, значения топиков. Для реализации требуется установить и настроить на контроллере агента SNMP.

Решение базируется на демоне snmpd, который разрабатывается и поддерживается открытым сообществом. Здесь даны общие рекомендации, подробную информацию ищите в официальной документации (англ). Перед началом установки убедитесь что правильно и полностью понимаете содержимое документации https://manpages.debian.org/unstable/snmpd/snmpd.conf.5.en.html

Установка и предварительная настройка пакетов

Обновите источники и установите пакеты snmp и snmpd:

apt update && apt -y install snmp snmpd

Отредактируйте основной файл конфигурации демона:

nano /etc/snmp/snmpd.conf
  1. Чтобы разрешить запросы со всех IP-адресов, закомментируйте строку:
    # agentaddress  127.0.0.1,[::1]
    
  2. В раздел # SECTION: Access Control Setup допишите строчки:
    view   systemonly  included   .1.3.6.1.4.1.2021.8
    view   systemonly  included   .1.3.6.1.4.1.2021.9
    
  3. В конец файла допишите ссылки на скрипты:
    extend .1.3.6.1.4.1.2021.8 tt /var/lib/snmp/mqtt-snmp.sh
    pass  .1.3.6.1.4.1.2021.9 /var/lib/snmp/mqtt-snmp_pass.sh
    

Дополнительную информацио о параметрах конфигурационного файла можно в документации snmpd

Добавление скрипта

В релизе wb-2304 и более новых сервис snmpd запускается от имени пользователя "Debian-snmp". Требуется коррекция прав:

echo 'Debian-snmp ALL=(ALL) NOPASSWD: /usr/bin/mosquitto_sub' > /etc/sudoers.d/snmpd

Отредактируйте скрипт /var/lib/snmp/mqtt-snmp.sh

nano /var/lib/snmp/mqtt-snmp.sh

И приведите его к виду:

#!/bin/sh
echo "mosquitto topics"
sudo mosquitto_sub -C 1 -t "/devices/wb-adc/controls/Vin"

OID'ы отдаваемые этим скриптом могут иметь тип только STRING

Для демонстрации вывода других типов служит второй:

nano /var/lib/snmp/mqtt-snmp_pass.sh

Содержимое:

#!/bin/sh -f

echo .1.3.6.1.4.1.2021.9.1
echo integer
/bin/systemctl is-active wb-mqtt-serial > /dev/null && echo 1 || echo 0

Скрипт возвращает INTEGER:1 если сервис wb-mqtt-serial запущен и 0 если нет.

Установите права:

chmod a+rx /var/lib/snmp/mqtt-snmp.sh /var/lib/snmp/mqtt-snmp_pass.sh

Теперь добавляем в этот скрипт нужные топики, или создаем несколько скриптов с разными наборами. Если вы создаете несколько скриптов, не забудьте дописать ссылки на них в конец файла /etc/snmp/snmpd.conf.

После сохранения изменений в скрипте, перезапустите демон snmpd:

systemctl restart snmpd && systemctl status snmpd

Можно протестировать:

snmpwalk -On -c public -v 2c 127.0.0.1 1.3.6.1.4.1.2021.8.4
snmpwalk -On -c public -v 2c 127.0.0.1 1.3.6.1.4.1.2021.9

Параметры:

  • -On включает числовой вывод, т.е. отключает трансляцию OIDов в имена из MIBа.
  • -c задаёт community string,
  • -v задаёт версию протокола SNMPv2c.