Продолжаю серию рассказов на тему настройки различных метрик в системе мониторинга заббикс. Сегодня расскажу, как быстро, легко и удобно передавать данные в json формате в zabbix и там их обрабатывать. Развитие функционала в последних версиях позволяют работать с json без лишних костылей и самописных скриптов.
Передача json данных в zabbix
Для примера возьму мониторинг работы ноды Bitcoin. В данном случае это совершенно не принципиально, так как подход к парсингу json в zabbix одинаковый везде. Формат json сейчас очень популярен. Большое число сервисов его поддерживают для вывода информации или логов. У биткоин ноды есть команды для вывода информации о состоянии ноды. Вывод идет в формате json. Вот пример:
# bitcoin-cli getblockchaininfo
{
"chain": "test",
"blocks": 1447503,
"headers": 1447503,
"bestblockhash": "506a6952d47b939e9d7baa34fc290b4356c446",
"difficulty": 12691409.16925421,
"mediantime": 1544607906,
"verificationprogress": 0.9999915635029165,
"initialblockdownload": false,
"chainwork": "00000000000000000000000000db56207f5987ad3",
"size_on_disk": 23159068639,
"pruned": false,
"softforks": [
{
"id": "bip34",
"version": 2,
"reject": {
"status": true
}
},
{
"id": "bip66",
"version": 3,
"reject": {
"status": true
}
},
{
"id": "bip65",
"version": 4,
"reject": {
"status": true
}
}
],
"bip9_softforks": {
"csv": {
"status": "active",
"startTime": 1456790400,
"timeout": 1493596800,
"since": 770112
},
"segwit": {
"status": "active",
"startTime": 1462060800,
"timeout": 1493596800,
"since": 834624
}
},
"warnings": "Warning: unknown new rules activated (versionbit 28)"
}
В своем примере я покажу, как из этого вывода парсить значения blocks и headers, хранить их в отдельных итемах в zabbix, чтобы дальше использовать в триггерах. По аналогии можно будет работать с другими значениями.
Настройка парсинга json в zabbix будет состоять из следующих шагов:
- Передаем всю json строку в исходном виде в итем в заббиксе.
- С помощью зависимых элементов данных формируем отдельные итемы с нужными значениями.
- Используем полученные итемы по назначению.
Для начала делаем простой скрипт для получения json — /etc/zabbix/scripts/getblockchaininfo.sh
#!/bin/bash /usr/bin/bitcoin-cli -rpcuser=user -rpcpassword=password -rpcport=8332 getblockchaininfo
Проверьте, что скрипт выдает корректную строку json. Далее создаем UserParameter. Я предпочитаю их хранить в разных конфигах, разделяя по функционалу. Создаю файл /etc/zabbix/zabbix_agentd.d/btc.conf следующего содержания:
UserParameter=blockchaininfo,/etc/zabbix/scripts/getblockchaininfo.sh
Сохраняем и перезапускаем zabbix-agent. Проверяем, что json корректно передается в нужном виде, без ошибок и прочих проблем:
# zabbix_agentd -t blockchaininfo
На выходе должны увидеть тот же самый json.
Zabbix агент подготовили. Для продолжения настройки, переходим на сервер.
Настройка zabbix server для мониторинга по json
На сервере создаем шаблон и добавляем в него элемент данных.
Подключите этот шаблон к хосту, где настраивали zabbix агент и подождите поступления данных. После того, как убедитесь, что json строка поступает на сервер, возвращайтесь в шаблон и создавайте еще один зависимый элемент данных.
В моем случае значение, которое я буду парсить из json, числовое, поэтому я выбираю соответствующий тип. У вас он может быть другой.
Дальше переходим на вкладку Preprocessing (предобработка):
В моем случае путь json очень простой. Если у вас более сложные выражения, то используйте удобный json парсер. Можете добавить туда свой json вывод и указать путь для парсинга, проверив таким образом его правильность.
Я убедился, что все верно. Сохраняем этот итем и ждем, когда он будет обработан. В latest data увидите значения из json строки.
По аналогии добавляете остальные элементы. Таким образом вы можете распарсить полностью json в отдельные итемы и использовать их дальше в триггерах и на графиках.
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!
Я показал простейший пример работы с json для тех, кто никогда не использовал его в zabbix. Благодаря тому, что в какой-то не очень давней версии появились зависимые элементы, работа с мониторингом сильно упростилась. Первое, что мне пришло в голову, когда нужно было выбрать отдельные значения из json вывода — написать баш скрипт. Это не сложно, я бы быстро распарсил и вытащил те данные, что мне нужны. Но вспомнив про зависимые элементы и возможность обработки данных в самом заббиксе, решил посмотреть в эту сторону и не ошибся. Так действительно проще и удобнее. За нас уже все сделали разработчики.
Скорее всего вам понадобится не просто парсинг json файла, но и автообнаружение на основе данных из него и автоматическое создание итемов. Но это уже тема отдельной статьи. А на сегодняшний момент это все, что я хотел рассказать, пока выдалась возможность поделиться информацией.





