Сбор данных MQTT в Zabbix. cannot subscribe topic timed out while subscribing

Подтверждаю.
Но грабли с кучей сервисов - слишком.
Будем ждать решения от zabbix.

Пока решение нашел в применении скрипта zbx_mqtt
Итак Решение:
У меня
WB 7.3.3, FW wb-2407
Zabbix 7.0.6, Debian 12 (bookworm)


На сервере Zabbix:

apt update 
apt upgrade
apt install python3 python3-paho*
cp mqtt /usr/lib/zabbix/externalscripts/
chmod +x /usr/lib/zabbix/externalscripts/mqtt

nano /usr/lib/zabbix/externalscripts/mqtt

В строке 1 меняем python2 на python3
#!/usr/bin/env python3

Далее получаем MasterData

mqtt["-t=/devices/{$DEV_NAME}/controls/#","--mqtt-host={HOST.CONN}"]

> {$DEV_NAME} в макросах указываем название устройства в WB

Скрин

И далее как обычно Зависимыми элементами данных получаем значения.
Пока все идеально, значения идут каждую секунду.


Технически можно добавлять в Wiki как решение с Zabbix, вместо UserParameter=mqtt.value[],mosquitto_sub -t ‘$1’ -C 1


Кроме данных, которых нет в MasterData. Уже гораздо меньше проблем, по сравнению с штатным решением от Zabbix.

Preprocessing failed for: {“/devices/\u0413\u0426 \u0427\u0438\u043b\u043b\u0435\u0440 1/controls/marked”: “1”, "/devices/.…

  1. Result: {“/devices/\u0413\u0426 \u0427\u0438\u043b\u043b\u0435\u0440 1/controls/marked”: “1”, "/devices/.…
  2. Failed: cannot extract value from json by path “$[”/devices/ГЦ Чиллер 1/controls/Давление гликоля в подающем трубопроводе"]": no data matches the specified path

Как решить эту проблему?

Уйти от русского языка в названии
Это коды Unicode таблицы.

Ок,
А эту?

  1. Failed: cannot extract value from json by path “$[‘/devices/KC_TP1_IN2/controls/working on battery’]”: no data matches the specified path
    17410:20241203:094113.366 error reason for “KC TP2-1:working.on.battery” changed: Preprocessing failed for: {“/devices/KC_TP2_IN1/controls/Irms L1”: “1213.04”, “/devices/KC_TP2_IN1/controls/Irms L1/meta”: …
  2. Failed: cannot extract value from json by path “$[‘/devices/KC_TP2_IN1/controls/working on battery’]”: no data matches the specified path
    17410:20241203:094113.379 error reason for “GC TP4-2:working.on.battery” changed: Preprocessing failed for: {“/devices/GC_TP4_IN2/controls/Irms L1”: “983.6”, “/devices/GC_TP4_IN2/controls/Irms L1/meta”: "{…
  3. Failed: cannot extract value from json by path “$[‘/devices/GC_TP4_IN2/controls/working on battery’]”: no data matches the specified path
    17410:20241203:094113.400 error reason for “GC TP1-1:working.on.battery” changed: Preprocessing failed for: {“/devices/GC_TP1_IN1/controls/Irms L1”: “320.03999999999996”, "/devices/GC_TP1_IN1/controls/Irms…
  4. Failed: cannot extract value from json by path “$[‘/devices/GC_TP1_IN1/controls/working on battery’]”: no data matches the specified path

Если покажете что у вас за выражение jsonnpath в припроцессинге и какие данные получаете - то могу сказать что не так

Проблему частично решил. (не отрабатывают только отсутствующие вообще в Master данные)
Путем добавления проверок в JSON.
Если у админов Wiki будет желание могу написать инструкцию по работе с Zabbix.

Скрин с правилами

Зачем проверяете на ошибку в meta/error? Мне кажется лишним этот шаг. Сразу в шаге jsonpath выставьте галочку «другое при ошибке» и отбрасывайте данные.

Потому что если не проверять meta/error, то данные в jsonpath могут быть. Они не меняются при наличии ошибки считывания. Поэтому читая сразу из jsonpath я не могу знать о том что датчик умер.

Например

Ах ну да. Подзабыл я что припроцессинг типа «проверка на ошибку» немного по другому работает. Пардон.

Тема старая, но тем не менее, может кому то будет полезно.
Проблема со стороны Заббикса, и она решена в в версиях агента 6.0.39rc1 и 7.0.10rc1
Тут ссылка на тему форума с обсуждением.

1 лайк