SNMP-агент контроллера
Системы мониторинга заказчика (The Dude, Zabbix, Nagios и подобные) умеют спрашивать оборудование по протоколу SNMP: «какая температура», «в каком состоянии устройство». Три узла этой страницы — snmp write, snmp read и snmp trap — нужны, чтобы программа U-Logic (редактор программы управления) могла ответить на такой вопрос. Контроллер сам становится SNMP-агентом, а значения вашей программы видны системе мониторинга как обычные параметры оборудования.
Это не то же самое, что узлы snmp и snmp set из категории «сеть» (см. «Сеть»). Те узлы ходят от контроллера к другому устройству: спрашивают принтер или коммутатор и передают программе ответ. Узлы этой страницы работают наоборот: к контроллеру обращается система мониторинга.
Узел |
Что делает |
|---|---|
|
кладёт значение из программы в таблицу агента — под указанным адресом (OID); система мониторинга читает его по SNMP |
|
читает значение из той же таблицы внутри контроллера. Это не SNMP-запрос по сети |
|
сам отправляет системе мониторинга уведомление о событии, не дожидаясь вопроса |
Как открыть окно любого узла и как пользоваться встроенной справкой — на странице «Узлы U-Logic». Подписи окон этих узлов и общей настройки английские, как в редакторе; в тексте они даны так, как показаны в окне.
Примечание
После «Развернуть» (кнопка U-Logic, которая запускает правки программы в работу) при включённом «Auto-start on deploy» контроллер начинает отвечать по SNMP на выбранном в настройке порту: это входящее соединение. Согласуйте порт с сетевым администратором (порты контроллера описаны в разделе «Сетевые порты и протоколы») и задайте своё «сообщество» (см. ниже).
Общая настройка: узел «SNMP Agent»
Все три узла работают через один узел настройки «SNMP Agent». Его создают один раз и выбирают в поле «Agent» каждого из узлов.
Откройте любой из трёх узлов (например,
snmp write). Рядом с полем «Agent» нажмите «+».Заполните окно настройки (поля ниже) и нажмите «Добавить».
В окне узла в поле «Agent» выбран новый агент. Нажмите «Готово».
Окно настройки «SNMP Agent» (значения — по умолчанию): 1 — «Base OID», 2 — «SNMP Port», 3 — «Auto-start on deploy», 4 — «Read Community», 5 — «Write Community», 6 — «Trap Targets»
Поля окна:
«Base OID» (блок «Agent Settings») — общее начало всех адресов этого контроллера. По умолчанию стоит условное значение
1.3.6.1.4.1.99999. Какое значение использовать в вашей сети, согласуйте с администратором системы мониторинга. Полный адрес значения — «Base OID» плюс относительный адрес из узла.«SNMP Port» (блок «Agent Settings», в окне — 161) — порт, на котором контроллер отвечает системе мониторинга.
«Auto-start on deploy» (блок «Agent Settings») — запускать агент при «Развернуть»; включено по умолчанию.
«Read Community» (блок «SNMPv2c» — доступ по паролю-«сообществу») — «сообщество» для чтения; по умолчанию
public. Задайте своё значение и укажите его же в системе мониторинга.«Write Community» (блок «SNMPv2c») — «сообщество» для записи извне; по умолчанию пусто. Если система мониторинга ничего не должна записывать в контроллер, оставьте пустым.
«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), и система мониторинга читает его как параметр контроллера.
Окно узла snmp write: 1 — «Agent», 2 — «OID», 3 — «Data Type», 4 — «Set initial value on deploy», 5 — «Pass message to output after write»
Поля окна:
«Agent» — настройка «SNMP Agent» (красная рамка означает, что агент ещё не выбран).
«OID» (блок «OID Configuration») — адрес значения. Относительный адрес пишут с точки, и он достраивается от «Base OID» (подсказка в поле —
.1.1.0 (relative to base OID)). Можно вписать и полный адрес. Слева от поля выбирается тип значения поля: строка, переменная среды,flow.,global.илиmsg.(OID из сообщения).«Data Type» (блок «OID Configuration») — тип значения: Integer (по умолчанию), OctetString, Counter32, Counter64, Gauge32, TimeTicks, IpAddress, OID. Выберите тот, который ждёт система мониторинга: число — Integer или Gauge32, текст — OctetString.
«Set initial value on deploy» (блок «Static Value (optional)») — флажок: записать начальное значение при «Развернуть»; тогда появляется поле «Value».
«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 можно взять в одной части программы значение, которое записала другая. Узел читает таблицу внутри контроллера и не обращается к сети.
Окно узла snmp read: 1 — «Agent», 2 — «Mode», 3 — «OID»
Поля окна:
«Agent» — настройка «SNMP Agent».
«Mode» — что читать: «Single OID» (одно значение, по умолчанию), «Walk subtree» (все значения под указанным адресом), «All OIDs (debug)» (вся таблица, для отладки).
«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 отправляет уведомление («трап») на сервер мониторинга в тот момент, когда сообщение пришло на вход.
Окно узла snmp trap: 1 — «Agent», 2 — «Trap OID», 3 — переключатель «Use target from config» / «Specify in message», 4 — «Target», 5 — «Varbinds (optional)»
Поля окна:
«Agent» — настройка «SNMP Agent». В ней должен быть хотя бы один получатель в списке «Trap Targets».
«Trap OID» (блок «Trap Configuration») — адрес-тип уведомления, обязательное поле (подсказка
.0.1 (notification type)). Относительный адрес достраивается от «Base OID». О том, какой адрес ждёт ваша система мониторинга, спросите её администратора.Переключатель в верхней части блока «Target» — кому отправлять: «Use target from config» (по умолчанию) — получатель из списка «Trap Targets» настройки агента; «Specify in message» — получатель берётся из сообщения (
msg.targetилиmsg.payload.target).«Target» (поле ниже переключателя) — при «Use target from config» впишите имя получателя из списка «Trap Targets» (подсказка «Target name from config»).
«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», а также что на сервере включён приём уведомлений. Узел сообщает, что отправил, но не что сервер принял.
Пример: опубликовать число и прочитать его обратно
Пример проверяет цепочку «запись → таблица агента → чтение» без внешней системы мониторинга и без оборудования. Нужна пустая вкладка.
Перетащите на вкладку
inject,snmp write, второйinject,snmp readиdebug. Соедините: первыйinject→snmp write; второйinject→snmp read→debug.Откройте первый
inject. В списке «Свойства» уmsg.payloadвыберите тип «число» и впишите 25. Нажмите «Готово».Откройте
snmp write, у поля «Agent» нажмите «+» и создайте агента, как описано в разделе «Общая настройка» (значения по умолчанию подойдут). В «OID» впишите.1.1.0, «Data Type» — Integer. Нажмите «Готово».Откройте
snmp read: «Agent» — тот же агент, «Mode» — «Single OID», «OID» —.1.1.0. Нажмите «Готово».Откройте
debug, в поле «Выводить» выберите «весь msg объект сообщения». Нажмите «Готово» и «Развернуть». Откройте вкладку отладки (значок «жук»).Нажмите кнопку слева от первого
inject, затем — слева от второго.
Цепочка примера: 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» из настройки агента.
Все поля узлов — во встроенной справке: откройте вкладку «справка» боковой панели (значок книги) и выберите узел.