Мониторинг и конфиг в MQTT (/config/serial и т. п.)

Настраиваю мониторинг WB устройств, подключенных по RS485 к WB6. Кто-то делал?
Zabbix 5.4, Agent2.

  1. Минимально необходимый вариант

Для полной автоматизации (LLD aka low level discovery) сильно нехватает списка сконфигурированных девайсов в виде MQTT топика, наподобие zigbee2mqtt/bridge/devices.

Список топиков /devices/+/meta/name не отражает текущее состояние, может содержать устаревшую информацию (девайс удален/disabled). К тому же, информация требуется единым сообщением, предпочтительно в JSON, а не набором топиков, с которым непонятно как работать напрямую.

Самое тривиальное решение - по крону публиковать конфиг в MQTT. Так и сделал, но если кому-то еще потребуется подобное - было бы неплохо добавить это в функционал wb-mqtt-serial.

Мониторинг уведомляет об отсутствии данных (Uptime не тикает, Supply Voltage не публикуется)

  1. Серьезный мониторинг Enterprise уровня

Статус опроса (ok/error/disabled) и счетчики транзакций и ошибок RS485 на каждое устройство в виде MQTT топиков. В награду получаем автоматическое уведомление о конкретике проблем на устройстве.

Я в заббикс шаблоны для всех типов устройств вручную набил, работы много
Но потом нормально

Как вывести список устройств с параметрами для LLD?

правило в cron:
*/5 * * * * mosquitto_pub -t '/config/serial' -f /etc/wb-mqtt-serial.conf -r

Получение данных:
Key: mqtt.get["{$MQTT_BROKER}","/config/serial"]

Discovery rule “Serial devices” - Dependent item, в Preprocessing добавить JavaScript:

var obj = JSON.parse(value);
var devices = []
for (var p in obj.ports) {
    var port = obj.ports[p]
    for (var d in port.devices) {
        var dev = port.devices[d]
        var en = (port.hasOwnProperty('enabled') ? port.enabled : true) && (dev.hasOwnProperty('enabled') ? dev.enabled : true);
        if (!en)
            continue;
        var topic = ('' + dev.device_type).toLowerCase();
        topic = topic.replace("wb-msw v.", "wb-msw-v"); // hack
        topic = topic.replace("wb-mwwww", "wb-mrgbw"); // hack
        topic = topic.replace(/[^a-z0-9-].*/, "");
        topic += '_' + dev.slave_id;
        var item = {
            "port": port.path.replace('/dev/tty', ''),
            "type": dev.device_type,
            "id": dev.slave_id,
            "topic": topic,
        }
        devices.push(item);
    }
}
// console.log(JSON.stringify(devices, null, 2));
return JSON.stringify(devices, null, 2);

LLD macros:

Ну и какой-нибудь item prototype чтобы все заработало, у меня настроено чтение Uptime регистра (по умолчанию выключено, enable: false, надо править шаблоны или через web gui):

Детали - в прикрепленном темплейте, напрямую подходит к Zabbix 5.4 + Agent2 (именно 2), но можно прикрутить получение данных внешней командой если версия агента ниже 5.4.

Template WB-Serial MQTT.yaml (5.3 КБ)

1 лайк

Если я верно вкурил задание, то подумал бы про opc/ua вместо голого mqtt. По крайней мере, сам копаю в эту сторону, понимая архитектурные ограничения mqtt.

Для свежего ПО - устройство не остается в топиках, если оно отключено/удалено.

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

у меня Zabbix 5.2, темплейт не импортируется
что в итоге, в каком виде получаются обнаруженные объекты, в виде полей в узле контроллера? или создаем шаблон датчика, подключаем к нему LLD и оно находит все его поля по SLAVE_ID?

я например сделал, чтоб каждый датчик был отдельным узлом, мне так удобней

Есть индустриальный протокол, google opc/ua. Его вариант publish/subscribe очень похож по идеологии на mqtt, но:

  1. описание структур данных специальным сообщением передается на сервер, он не должен разгадывать топики; 2) диагностические сообщения идут для всей периферии; 3) определено время отсылки телеграмм.
    Для задач реального сетевого управления и мониторинга он подходит лучше mqtt, плюс, вроде в дистре есть демон opc/ua.
    Но это, конечно, надо решать на этапе разработки архитектуры системы.
root@wb:~# zabbix_agentd --version
zabbix_agentd (daemon) (Zabbix) 4.0.3

на контроллере не самый свежий агент, зато “из коробки”. Пришлось использовать рядом стоящий centos 8.
Приведенный выше шаблон минималистичен, только Uptime, устройства по типам не различаются, но это сделать несложно - Filter по LLD macro {#TYPE}.

у меня на двух контроллерах

zabbix_agentd --version
zabbix_agentd (daemon) (Zabbix) 5.0.2

на одном

zabbix_agentd --version
zabbix_agentd (daemon) (Zabbix) 5.0.9

полет нормальный

можно подробней, для чего?

Интересно. Сторонний репозиторий?
Нужен zabbix-agent2 для mqtt, он на Go.

установка zabbix_agent 5.x на WB

так можно запускать mqtt.get с другого хоста, я например с заббикс сервера запускаю, необязательно там localhost в параметрах должен быть

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.