🐹 Zabbix: Парсинг и передача json данных.

Содержание:

1. Задача.
2. Решение задачи.
3. Оригиналы источников информации.


1. Задача.

Организовать мониторинг текущих версий контейнеров развернутых на серверах.

Внимание! В данном примере будут заданы очень не рациональные временные параметры для сбора метрик, но это для примера, чтобы понятнее было.

Краткое описание задач:

  • с помощью crontab для Zabbix agent будут запускаться bash-скрипты, которые будут формировать файлы вида *.json;
  • в файлах *.json система мониторинга Zabbix server будет искать определённые поля и забирать их себе в отчет об узлах;
  • сбор информации каждые 10 минут нового часа;
  • время хранения информации 1 год.

Подзадача:

  • для получения информации для файлов вида *.json потребуется написать bash-скрипт для каждого вида информации.

2. Решение задачи.

2.1. Решение будет состоять из нескольких этапов:

  • написание bash-скрипта для метрик Zabbix agent, каталог /etc/zabbix/scripts/*.sh;
  • автоматическая отработка скрипта с помощью crontab в определенные периоды времени;
  • создание файла конфигурации Zabbix agent для скрипта /etc/zabbix/zabbix_agentd.d/*.conf ;
  • формирование *.json файла со специальными текстовыми блоками информации;
  • создание шаблона, в котором Zabbix server будет обращаться к файлу *.json и вытаскивать из него содержимое полей;
  • применение шаблона на определенные сервера;
  • проверка вывода информации в Zabbix server по определенным серверам.

2.2. Подготовка Zabbix agent.

Получим информацию о докерах на серверах с помощью bash-скрипта:

#!/bin/bash

# команда для получения информации о докерах
docker_info=$(docker ps --format '{{json .Names}}: {{json .Image}},'| sed '$ s/.$//')

# файл json с информацией о докерах
jpd="/$host_name.docker.json"

# формирование выходящей информации с формате json
echo "{" > $jpd
echo "\"dockers\": {" >> $jpd
echo "$docker_info" >> $jpd
echo "}" >> $jpd
echo "}" >> $jpd

# контрольный вывод сформированной информации в консоль
# cat $jpd

Скрипт следует поместить в /etc/zabbix/scripts/ и сделать его исполняемым, чтобы Zabbix agent мог его автоматически использовать.

# chmod +x /etc/zabbix/scripts/get-docker-ecp.sh

Ставим скрипт на исполнение в /etc/crontab:

* * * * * root /usr/bin/bash /etc/zabbix/scripts/get-docker-ecp.sh > /dev/null 2>&1

Внимание! Нам не потребуется нижняя часть раздела под этим сообщением, потому что мы будем забирать вывод содержимого файла docker-ver.json, а не значение, полученное по ключу Zabbix agent ключа docker_ver.info.

Для того, чтобы Zabbix server мог обращаться к скрипту через Zabbix agent, скрипту следует присвоить уникальный UserParameter и записать его в /etc/zabbix/zabbix_agentd.d в файл конфигурации *.conf:

UserParameter=docker_ver.info,/etc/zabbix/scripts/get-docker-ver.sh

Сохраняем и перезапускаем Zabbix agent:

# systemctl restart zabbix-agent

Проверяем, что json корректно передается в нужном виде, без ошибок и прочих проблем:

# zabbix_agentd -t docker_ver.info

На выходе, в ответе консоли, должны увидеть тот же самый json:

docker_ver.info [t|
{
   "dockers": {
      "docker-m-w-n-p_nginx_1": "nginx:latest",
      "docker-m-w-n-p_pma_1": "phpmyadmin/phpmyadmin",
      "docker-m-w-n-p_wordpress_1": "wordpress:php7.4-fpm-alpine",
      "docker-m-w-n-p_mysql_1": "mariadb",
      "onlyoffice": "onlyoffice/documentserver"
   }
}
]

Zabbix agent подготовили. Для продолжения настройки, переходим на Zabbix server.

2.3. Подготовка Zabbix server.

На сервере создаем шаблон Dockers info check для работы Zabbix server с файлом ecp-ver.json и добавляем в него элементы данных.


Внимание! В данном примере описывается работа Zabbix server c файлом ecp-ver.json, а не ключом docker_ver.info. Если вам надо забирать значение по ключу, то в графе Key выбирайте значение UserParameter, то есть docker_ver.info. Будете получать значение с этого скрипта сразу в Zabbix.


Путь ConfigurationTemplatesCreate template.

Переходим в шаблон Dockers info check и создаем Items:

Укажем Zabbix server, что файле docker-ver.json нас интересует содержимое поля dockers.

Нажимаем соседнюю с Item ссылку Preprocessing и заполняем поля по смыслу:

После заполнения протестируем работу выборки интерактивной кнопкой Test.

Заполняем поля по смыслу и нажимаем Get value. Сработает первая часть нашего шаблона, Zabbix server обнаружит файл ecp-ver.json с нужным полем.

Нажимаем Get value and test снизу и сработает вторая часть нашего шаблона, Zabbix server извлечет значение поля и обрежет {…} по краям.

Всё, смело нажимаем закрыть Test. И клавишу Update, чтобы сохранить нашу конфигурацию.

Шаблон готов.

2.4. Указание хостов для сбора информации.

Обозначим на какие хосты следует применять данный Dockers info check шаблон.

Применяем Dockers info check шаблон на целевые объекты и переходим в раздел поступления информации Last data, открываем раздел информации «— other —» смотрим результат получения информации о докерах:

Теперь Zabbix server будет вести TimeLine версий докеров с интервалом 10 минут.

3. Оригиналы источников информации.

  1. serveradmin.ru «Парсинг и передача json данных в Zabbix».
  2. jsonpath.com «JSONPath Online Evaluator».