Как формировать данные через JSON в Zabbix 4.4

Posted by

Уж очень мне понравилось опубликованное на Habr(е) про то, как автор решил настроить мониторить базы Redis через Zabbix посредством скрипта bash преобразующего собираемые данные в JSON формат, а после передающего их через агент в виде строки, а уже на серверой части Zabbix идет разборка. Так как я плотно в меру своих задумок интересуюсь и использую связку Ubuntu 18.04 + Zabbix, то решил более подробно со своей точки зрения составить свою пошаговую заметку. Пройдя все нюансы не вошедшие в оригинал.

Стенд на базе Debian 10 + Proxmox, а VM развернуты через сервис FOG Project с применением файлов ответов.

Ubuntu 18.04 + Zabbix Server 4.4 (172.33.33.6)

Ubuntu 18.04 + OwnCloud 10 + Nginx

  • srv-zabbix = 172.33.33.6
  • srv-own = 172.33.33.15

Шаг №1: Извлекаю на консоль формируемую Redis информацию с системе где OwnCloud 10 + Redis (tips_ubuntu_18_04_owncloud_redis_v1.odt):

Шаг №2: Имея вывод из «Шаг №1» могу его сохранить в файл, а после через создаваемую задачу посредством cron обновлять с заданной периодичностью и через UserParameter извлекать из файла требуемые значения. Обычно я так и делал, но после этой заметки уже все по-другому.

Шаг №3: Попробую извлечь значение параметра used_memory (Кол-во использованной памяти Redis-сервером) через Zabbix-агент:

Шаг №4: Проверяю, как с Zabbixсервера получаю значение элемента данныхused_memory:

Шаг №5: Завожу в Zabbixсервер хост где у установлен OwnCloud 10

http://172.33.33.6/zabbix/ - Admin&zabbix - Configuration - Hosts - Create Host

  • Hostname: srv-own
  • Groups: GROUP_Ubuntu
  • Agent Interfaces: 172.33.33.15
  • Connect to: IP
  • Port: 10050
  • Description: OwnCloud 10
  • Monitored by proxy: (no proxy)
  • Enabled: отмечаю галочкой

и нажимаю Add

Шаг №6: Создаю элемент данных used_memory

  • Name: Redis:used_memory
  • Type: Zabbix agent
  • Key: used_memory
  • Host interface: 172.33.33.15:10050
  • Update interval: 5m
  • New application: Redis
  • Enabled: отмечаю галочкой

и нажимаю Add

Шаг №7: Результат снимаемого показателя и отображения в Zabbix

Результат снимаемого показателя и отображения в Zabbix

Шаг №8: Из статьи автора на хабре позаимствовал скрипт который из вывода redis-cli info с учетом определенных выборок формирует вывод в JSONформате:

Результат работы скрипта:

Шаг №9: Раз скрипт формирует данные, то его можно указать агенту на OwnCloud 10 системе, что при запросе с сервера, а Zabbixагент исполнит его и передаст значения на Zabbixсервер:

Шаг №10: На Zabbixсервере в добавленном хосте создаю элемент данных на получение данных от Zabbixагента который дергает скрипт redis_get_info.sh

  • Name: Redis:Info
  • Type: Zabbix agent
  • Key: redis_get_info
  • Host interface: 172.33.33.15:10050
  • Type of information: Text
  • Update interval: 1m
  • History storage period: Storage period: 90d
  • New Application: ввожу Redis тем самым создаю

Создаю элемент данных на получение данных от Zabbix-агента который дергает скрипт redis_get_info.sh

Проверяю, что Zabbixсервер получает данные — ответ да!

Шаг №11: Теперь создаю элемент данных на получение версии, но есть важный нюанс, данные получаем не с агента, а с результата выполнения элемента данных который запрашивает информацию скриптом. Значит выбираем обработку Type: Dependent item

  • Name: Redis: Version
  • Type: Dependent item
  • Master item: Select и указываю элемент данных из "Шаг №10", т.е. Redis:redis_get_info, получается: srv-own:Redis:Redis_get_info
  • Key: redis_get_info.version (т.е. название скрипта + точка + результат из вывода скрипта, к примеру version)
  • Type of information: Character (в зависимости что выводит скрипт число или текст указываем либо Character либо целое, плавающее)
  • History storage period: Storage period: 90d
  • Show value: As is
  • Applications: выбираю Redis

Формирую элемент данных на основе обработки вывода JSON результатов

но прежде чем нажимать Add нужно перейти в Preprocessing и указать излекаемые данные формируются, как

  • Name: JSONPath
  • Parameters: $.version

и тогда можно нажимать «Update»

Излекаемые данные формируются, как Name: JSONPath

И вот извлекаемый результат

И вот извлекаемый результат

Прикольно!

По аналогии создаю элементы данных + указываю сделать предобработку где собираемые данные формируются скриптом в JSON формате. Итого

Итого

На основе созданных элементов решил для себя сделать собственный шаблон, создал его, хотел было перейти в него и посмотреть, а обнаружил, что в моем Zabbix 4.4 уже есть дефолтный шаблон под именем: Template DB Redis и снимаемых метрик в нем целых 64, плюс уже предопределены триггеры, обозначены какие графики строить, экраны, правила обнаружения. И кстати используется обработка на основе JSON получения метрик, вот только где скрипт под это дело?

Просмотр как настроены элементы данных в этом шаблоне показало, что все обработки строятся на выводе redis-cli info | grep <key>, т.е. я могу просто взять скрипт выше и дополнить его, переименовать, как в шаблоне. Вот только анализ работы данного шаблона мне нисколько не даст полезных знаний за которыми я все разбираю сам, уж лучше я буду делать свой, брать из готового только то что мне нужно.

По-сути я сделал что задумывал в этой заметке, теперь только по возможности так и буду делать, и смогу переделать заметку по снятию показаний со SMART и SSD дисков. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.