У меня в доме стоит электрокотёл с GSM модулем от компании Zont. Управлять устройством можно либо через личный кабинет на сайте zont-online.ru, либо через приложение. Я захотел всю статистику завести в Zabbix, чтобы удобно было смотреть. В перспективе выведу основные метрики на какой-нибудь экран в доме. Данный пример будет типовым для любого сбора метрик в Zabbix через API.
1️⃣ Согласно документации получаем Token для доступа к системе по API. Для этого через curl делаем запрос к сервису с указанием своей учётной записи:curl 'https://zont-online.ru/api/get_authtoken' \
-u 'login:password' \
-H 'X-ZONT-Client: your@email' \
-H 'Content-Type: application/json' \
-d '{"client_name": "Zabbix"}'
В самом начале ответа получите токен, который нужно будет использовать в запросах.
2️⃣ Получаем список устройств в личном кабинете. У меня оно одно:curl 'https://zont-online.ru/api/devices' \
-H 'X-ZONT-Client: your@email' \
-H 'X-ZONT-Token: xxxxxxxxxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"load_io": true}'
Убеждаемся, что всё работает, данные приходят верные. Рекомендую запрос сразу в jq отправить, чтобы было удобно смотреть.
3️⃣ Идём в Zabbix, создаём новый шаблон. Сразу добавляем в него 2 макроса: {$ZONT_CLIENT_EMAIL} и {$ZONT_TOKEN}. Далее добавляем новый айтем:
- тип: HTTP Agent
- тип информации: Журнал (лог)
- url: https://zont-online.ru/api/devices
- поля запроса: load_io ⇒ true
- тип запроса: POST
- заголовки: X-ZONT-Client ⇒ {$ZONT_CLIENT_EMAIL}
X-ZONT-Token ⇒ {$ZONT_TOKEN}
Остальные параметры по желанию.
4️⃣ Прикрепите новый шаблон к любому хосту (я обычно такие шаблоны к Zabbix Server цепляю) и проверьте работу этого айтема. Не забудьте прописать значения макросов. Если данные идут и формат у них json, то двигаемся дальше. Добавляем в шаблон новый зависимый айтем. Я его назвал Температура Бойлерная:
- тип: зависимый элемент данных, в качестве основного указываем предыдущий
- тип информации: числовой с плавающей точкой
Остальное по желанию. Идём в предобработку и добавляем 3 шага:
- JSONPath: $.body.devices[*].thermometers[*].last_value
- Обрезать слева: [
- Обрезать справа: ]
После такой обработки я получаю температуру с термодатчика в бойлерной. JSONPath рекомендую проверять в онлайн сервисе jsonpath.com. Там удобно это делать. В зависимости от строки json, правило у вас будет своё. Аналогично можно добавить все необходимые метрики.
Вот и всё. По такому принципу можно обработать любые данные, поступающие от API в формате json. Более подробно и наглядно я эту тему разбирал в отдельной статье на сайте.
#zabbix
>>Click here to continue<<
