SNMP-агент контроллера

Системы мониторинга заказчика (The Dude, Zabbix, Nagios и подобные) умеют спрашивать оборудование по протоколу SNMP: «какая температура», «в каком состоянии устройство». Три узла этой страницы — snmp write, snmp read и snmp trap — нужны, чтобы программа U-Logic (редактор программы управления) могла ответить на такой вопрос. Контроллер сам становится SNMP-агентом, а значения вашей программы видны системе мониторинга как обычные параметры оборудования.

Это не то же самое, что узлы snmp и snmp set из категории «сеть» (см. «Сеть»). Те узлы ходят от контроллера к другому устройству: спрашивают принтер или коммутатор и передают программе ответ. Узлы этой страницы работают наоборот: к контроллеру обращается система мониторинга.

Узел

Что делает

snmp write

кладёт значение из программы в таблицу агента — под указанным адресом (OID); система мониторинга читает его по SNMP

snmp read

читает значение из той же таблицы внутри контроллера. Это не SNMP-запрос по сети

snmp trap

сам отправляет системе мониторинга уведомление о событии, не дожидаясь вопроса

Как открыть окно любого узла и как пользоваться встроенной справкой — на странице «Узлы U-Logic». Подписи окон этих узлов и общей настройки английские, как в редакторе; в тексте они даны так, как показаны в окне.

Примечание

После «Развернуть» (кнопка U-Logic, которая запускает правки программы в работу) при включённом «Auto-start on deploy» контроллер начинает отвечать по SNMP на выбранном в настройке порту: это входящее соединение. Согласуйте порт с сетевым администратором (порты контроллера описаны в разделе «Сетевые порты и протоколы») и задайте своё «сообщество» (см. ниже).

Общая настройка: узел «SNMP Agent»

Все три узла работают через один узел настройки «SNMP Agent». Его создают один раз и выбирают в поле «Agent» каждого из узлов.

  1. Откройте любой из трёх узлов (например, snmp write). Рядом с полем «Agent» нажмите «+».

  2. Заполните окно настройки (поля ниже) и нажмите «Добавить».

  3. В окне узла в поле «Agent» выбран новый агент. Нажмите «Готово».

../../_images/node-snmp-agent-config.png

Окно настройки «SNMP Agent» (значения — по умолчанию): 1 — «Base OID», 2 — «SNMP Port», 3 — «Auto-start on deploy», 4 — «Read Community», 5 — «Write Community», 6 — «Trap Targets»

Поля окна:

  1. «Base OID» (блок «Agent Settings») — общее начало всех адресов этого контроллера. По умолчанию стоит условное значение 1.3.6.1.4.1.99999. Какое значение использовать в вашей сети, согласуйте с администратором системы мониторинга. Полный адрес значения — «Base OID» плюс относительный адрес из узла.

  2. «SNMP Port» (блок «Agent Settings», в окне — 161) — порт, на котором контроллер отвечает системе мониторинга.

  3. «Auto-start on deploy» (блок «Agent Settings») — запускать агент при «Развернуть»; включено по умолчанию.

  4. «Read Community» (блок «SNMPv2c» — доступ по паролю-«сообществу») — «сообщество» для чтения; по умолчанию public. Задайте своё значение и укажите его же в системе мониторинга.

  5. «Write Community» (блок «SNMPv2c») — «сообщество» для записи извне; по умолчанию пусто. Если система мониторинга ничего не должна записывать в контроллер, оставьте пустым.

  6. «Trap Targets» — получатели уведомлений для snmp trap (на снимке список пуст, под заголовком «+ добавить»). Для каждого: «Name» (по нему получателя выбирают в snmp trap), «Host» — адрес сервера мониторинга, «Port», «Version» (SNMPv2c или SNMPv3), для v2c — «Community», для v3 — пользователь и протоколы.

Ещё в окне:

  • «Name» — имя агента в списках узлов («SNMP Agent» — подсказка в пустом поле).

  • «AgentX Port» (в окне — 705) — второй порт агента; менять его обычно не требуется.

  • «Debug mode» — подробные сообщения для отладки; выключено по умолчанию. Включайте только на время проверки.

  • «SNMPv3 Users» — пользователи SNMPv3 (список, «+ добавить»). В SNMPv3 пользователь проверяется паролем, а уровень доступа может включать шифрование. Для каждого пользователя: «Username», «Auth Protocol» (SHA, SHA-224, SHA-256, SHA-384, SHA-512, MD5), «Auth Password» (не короче 8 символов), «Priv Protocol» (AES, AES-192, AES-256, DES, None), «Priv Password», «Access Level» (authPriv, authNoPriv, noAuthNoPriv).

Что вы увидите: в окнах узлов поле «Agent» больше не обведено красной рамкой, а под узлом вместо красного «no config» появляется статус.

snmp write: опубликовать значение

Зачем. Системе мониторинга заказчика нужно видеть состояние помещения: температуру, «свет включён», «идёт совещание», версию программы. snmp write записывает значение из программы по заданному адресу (OID), и система мониторинга читает его как параметр контроллера.

../../_images/node-snmp-write.png

Окно узла snmp write: 1 — «Agent», 2 — «OID», 3 — «Data Type», 4 — «Set initial value on deploy», 5 — «Pass message to output after write»

Поля окна:

  1. «Agent» — настройка «SNMP Agent» (красная рамка означает, что агент ещё не выбран).

  2. «OID» (блок «OID Configuration») — адрес значения. Относительный адрес пишут с точки, и он достраивается от «Base OID» (подсказка в поле — .1.1.0 (relative to base OID)). Можно вписать и полный адрес. Слева от поля выбирается тип значения поля: строка, переменная среды, flow., global. или msg. (OID из сообщения).

  3. «Data Type» (блок «OID Configuration») — тип значения: Integer (по умолчанию), OctetString, Counter32, Counter64, Gauge32, TimeTicks, IpAddress, OID. Выберите тот, который ждёт система мониторинга: число — Integer или Gauge32, текст — OctetString.

  4. «Set initial value on deploy» (блок «Static Value (optional)») — флажок: записать начальное значение при «Развернуть»; тогда появляется поле «Value».

  5. «Pass message to output after write» (блок «Behavior») — флажок: после записи отправить сообщение на выход. Выключен по умолчанию, и тогда у узла выхода нет.

Ещё в окне: «Name» — подпись на вкладке.

Что принимает: сообщение со значением в msg.payload (число или строка); значение записывается по адресу узла. Можно передать и объект { "oid": …, "value": …, "type": … }, и массив таких объектов: тогда за одно сообщение запишется несколько значений. Пустое значение пропускается. Если включён «Pass message to output after write», на выход уходит то же сообщение с дополнительными полями msg.oid (полный адрес), msg.type и msg.snmpValue.

Статус под узлом: зелёный — адрес и записанное значение (или «N OIDs written», если писали пакетом); красный — «no config», «agent not ready», «init error» или текст ошибки.

Частые ошибки.

  • Красный «no config» — не выбран «Agent».

  • Система мониторинга не видит значение — она спрашивает не тот адрес. Проверьте: полный адрес — это «Base OID» плюс относительный из узла; «сообщество» в системе мониторинга совпадает с «Read Community»; программа развёрнута.

  • Значение не читается как число — «Data Type» стоит OctetString, а нужен Integer, или наоборот.

snmp read: прочитать то, что опубликовано

Зачем. Проверить, что значение действительно записано в таблицу агента: «что сейчас видит система мониторинга». Ещё с помощью snmp read можно взять в одной части программы значение, которое записала другая. Узел читает таблицу внутри контроллера и не обращается к сети.

../../_images/node-snmp-read.png

Окно узла snmp read: 1 — «Agent», 2 — «Mode», 3 — «OID»

Поля окна:

  1. «Agent» — настройка «SNMP Agent».

  2. «Mode» — что читать: «Single OID» (одно значение, по умолчанию), «Walk subtree» (все значения под указанным адресом), «All OIDs (debug)» (вся таблица, для отладки).

  3. «OID» — адрес, как в snmp write (подсказка .1.1.0 (relative to base OID)). В режиме «All OIDs (debug)» поле скрыто.

Ещё в окне: «Name» — подпись на вкладке.

Что принимает: любое сообщение запускает чтение. Режим и адрес можно подменить сообщением (msg.mode, msg.oid). Что выдаёт: для «Single OID» — значение в msg.payload (или null, если адреса нет), msg.oid и msg.type. Если по адресу ничего нет, msg.payload равен null, а в msg.error — «OID not found». Для двух других режимов — массив записей с адресом, значением и типом в msg.payload и их число в msg.count.

Статус под узлом: серый «ready»; зелёный — адрес или «N OIDs»; жёлтый «not found» — по этому адресу ничего не записано; красный — ошибка или «no config».

Частые ошибки.

  • Жёлтый «not found» — значение по адресу ещё не записано snmp write, или адрес указан иначе (с «Base OID» в одном узле и без него в другом).

  • Ждёте, что узел спросит внешнее устройство по SNMP, — для этого есть snmp из категории «Сеть».

snmp trap: сообщить о событии

Зачем. Система мониторинга опрашивает контроллер раз в минуту или реже, а о тревоге нужно узнать сразу: превышена температура, пропал сигнал, сработала аварийная кнопка. snmp trap отправляет уведомление («трап») на сервер мониторинга в тот момент, когда сообщение пришло на вход.

../../_images/node-snmp-trap.png

Окно узла snmp trap: 1 — «Agent», 2 — «Trap OID», 3 — переключатель «Use target from config» / «Specify in message», 4 — «Target», 5 — «Varbinds (optional)»

Поля окна:

  1. «Agent» — настройка «SNMP Agent». В ней должен быть хотя бы один получатель в списке «Trap Targets».

  2. «Trap OID» (блок «Trap Configuration») — адрес-тип уведомления, обязательное поле (подсказка .0.1 (notification type)). Относительный адрес достраивается от «Base OID». О том, какой адрес ждёт ваша система мониторинга, спросите её администратора.

  3. Переключатель в верхней части блока «Target» — кому отправлять: «Use target from config» (по умолчанию) — получатель из списка «Trap Targets» настройки агента; «Specify in message» — получатель берётся из сообщения (msg.target или msg.payload.target).

  4. «Target» (поле ниже переключателя) — при «Use target from config» впишите имя получателя из списка «Trap Targets» (подсказка «Target name from config»).

  5. «Varbinds (optional)» (заголовок блока) — дополнительные значения, которые уйдут вместе с уведомлением (например, температура). В каждой строке «OID», «Type» (Integer, OctetString, Counter32, Gauge32, TimeTicks, IpAddress) и «Value»; строку добавляет «+ добавить».

Ещё в окне: «Name» — подпись на вкладке.

Что принимает: любое сообщение отправляет уведомление. Адрес уведомления, получателя и дополнительные значения можно задать сообщением (msg.trapOid, msg.target, msg.varbinds). Если получатель не задан, берётся первый из списка «Trap Targets»; если список пуст — ошибка. Что выдаёт: то же сообщение с полем msg.trapSent (адрес уведомления, получатель, время, success).

Статус под узлом: серый «ready», синий «sending…», зелёный «sent» (на 2 секунды, затем снова «ready»); красный — ошибка или «no config».

Частые ошибки.

  • Красная ошибка о получателе — в «Trap Targets» никого нет или имя в поле «Target» не совпадает с именем в списке.

  • Зелёный «sent», а у заказчика уведомления нет — проверьте адрес сервера мониторинга и порт в «Trap Targets», а также что на сервере включён приём уведомлений. Узел сообщает, что отправил, но не что сервер принял.

Пример: опубликовать число и прочитать его обратно

Пример проверяет цепочку «запись → таблица агента → чтение» без внешней системы мониторинга и без оборудования. Нужна пустая вкладка.

  1. Перетащите на вкладку inject, snmp write, второй inject, snmp read и debug. Соедините: первый inject → snmp write; второй inject → snmp read → debug.

  2. Откройте первый inject. В списке «Свойства» у msg.payload выберите тип «число» и впишите 25. Нажмите «Готово».

  3. Откройте snmp write, у поля «Agent» нажмите «+» и создайте агента, как описано в разделе «Общая настройка» (значения по умолчанию подойдут). В «OID» впишите .1.1.0, «Data Type» — Integer. Нажмите «Готово».

  4. Откройте snmp read: «Agent» — тот же агент, «Mode» — «Single OID», «OID» — .1.1.0. Нажмите «Готово».

  5. Откройте debug, в поле «Выводить» выберите «весь msg объект сообщения». Нажмите «Готово» и «Развернуть». Откройте вкладку отладки (значок «жук»).

  6. Нажмите кнопку слева от первого inject, затем — слева от второго.

../../_images/flow-snmp-publish-read.png

Цепочка примера: inject «Число 25» → snmp write «Опубликовать .1.1.0»; inject «Прочитать» → snmp read «Прочитать .1.1.0» → debug «Что прочитали»

Что вы увидите. После первого нажатия под snmp write появляется зелёный статус с адресом и значением 25. После второго в отладке — сообщение, где в payload лежит 25, а в oid — полный адрес вместе с «Base OID». Если нажать кнопку второго inject до первого, в payload будет null, в error — «OID not found», а статус snmp read — жёлтый «not found».

Примечание

Чтобы проверить, что значение видит система мониторинга, обратитесь к контроллеру из неё: адрес — «Base OID» плюс .1.1.0, «сообщество» — «Read Community» из настройки агента.

Все поля узлов — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.