Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
​​У меня в доме стоит электрокотёл с 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