Привет, Хабр! В этой статье поделюсь полезным подходом мониторинга в Zabbix — через обнаружение элементов данных в ответе на SQL-запрос. Этот тип мониторинга обычно используется в бизнес-мониторинге, когда собираются показатели производительности бизнес-процесса: количество пользователей, транзакций или выполняется контроль статуса операций. В целом, это универсальный подход, про который администраторы Zabbix иногда забывают. А он есть. Добро пожаловать под кат.

Что будем делать в этой статье:

  • Клонируем репозиторий pg_stat_monitor от Percona и соберём этот плагин из исходников;
  • Добавим плагин pg_stat_monitor в БД PostgreSQL, на которой работает Zabbix;
  • Создадим шаблон для выполнения SQL-запроса в pg_stat_monitor;
  • Создадим правило низкоуровневого обнаружения для разбора ответа от SQL-запрос;
  • Создадим зависимые прототипы элементов данных для мониторинга некоторых характеристик производительности БД.

На сервере предварительно уже установлен Zabbix 5.2, работающий на PostgreSQL 12.

Установка и настройка плагина pg_stat_monitor для PostgreSQL


Pg_stat_monitor — плагин для сбора статистики от Percona, основанный на pg_stat_statements. Можно сказать, что pg_stat_monitor — это pg_stat_statements на стероидах. Основной недостаток pg_stat_statements — отсутствие агрегированной статистики (и гистограмм в т.ч.) по накопленным запросам и статистике по ним. Соответственно, pg_stat_monitor лишен такого недостатка. Объём статистики, которая может собираться, настраивается в конфигурации плагина. Работает плагин следующим образом:

  • собирается статистика и объединяется в корзину (агрегат);
  • корзина собирается и хранится заданный период времени;
  • когда время истекает, pg_stat_monitor сбрасывает всю накопленную статистику и начинает собирать её заново.

Т.к. все данные из корзины в итоге исчезнут, нужно успеть прочитать эти данные. Как раз их мы и будем читать при помощи Zabbix.

Исходный код плагина доступен в репозитории Percona на Github. Мы его оттуда клонируем, соберём на тестовом сервере и подключим к имеющемуся инстансу PostgreSQL.

Листинг установки плагина
# dnf -y install gcc git libpq-devel postgresql-server-devel 
# cd /tmp
# git clone git://github.com/Percona/pg_stat_monitor.git
# cd pg_stat_monitor
# make USE_PGXS=1
# make USE_PGXS=1 install
# sudo -i -u postgres psql
# postgres=# alter system set shared_preload_libraries=pg_stat_monitor;
# postgres=# \q
# systemctl restart postgresql
# sudo -i -u postgres psql
# postgres=# create extension pg_stat_monitor;
# postgres=# \q


После установки можно убедиться, что всё работает и спросить у плагина его настройки:



Ещё можно спросить, что он вообще может показать:



Некоторые из данных со скриншота выше мы будет потом забирать в Zabbix.

Создание шаблона в Zabbix для работы с БД по ODBC


Теперь установим на сервер с БД драйвер ODBC:

# dnf -y install postgresql-odbc

И проверим как там называется драйвер:



Теперь можно перейти в Zabbix, добавить некоторые макросы:



И создать мастер-элемент данных, из которого потом будут разбирать всё необходимое зависимые элементы:



В результате получим вывод в формате JSON:



Создание LLD-правила и прототипов элементов данных


На следующем шаге добавим к шаблону правило дискаверинга:



Добавим LLD-макрос для создания новых объектов по полю queryid:



Создаём один из прототипов элементов данных:



И шаги препроцессинга:



В итоге мы настроили три прототипа данных для разбора полей с текстом запроса, максимальным временем выполнения и количеством вызовов:



В результате всех выполненных настроек получим следующую картину:



Некоторые из запросов окрашены в серый, потому что queryid с ними более не обнаруживаются. Можно настроить минимальное время хранения таких объектов и удалять их сразу после отправки оповещения о длительном SQL-запросе.

Заключение


Мы рассмотрели общую концепцию настройки низкоуровнего обнаружения через SQL-запросы. Примерно таким образом можно автоматизировать мониторинг специализированных метрик из баз данных. А собирая все необходимые данные в представления, можно за один запрос извлекать максимум требуемой информации. Подробнее о наших услугах относительно Zabbix вы можете узнать на специальной странице.

А ещё можно почитать:

Zabbix под замком: включаем опции безопасности компонентов Zabbix для доступа изнутри и снаружи

Добавляем CMDB и географическую карту к Zabbix

Структурированная система мониторинга на бесплатных решениях

Мониторинг принтеров в Zabbix

Как сократить объем дискового пространства, занимаемого БД Zabbix

Как снизить количество шумовых событий в Zabbix