Компания «Дистрибьютед Сервис» на рынке уже более 11 лет. Компания долго использовала собственную систему мониторинга баз данных, но со временем система перестала отвечать современным тенденциям и возрастающим потребностям. Компания проанализировала несколько систем мониторинга, и, взвесив все «за» и «против», остановила свой выбор на Zabbix.

Требования к решению

Компания проанализировала подходы к мониторингу баз данных непосредственно в Zabbix и сформулировала требования к агенту мониторинга:

— кросс-платформенное (Linux, Windows, AIX, Solaris, а может будет нужно HP-UX или FreeBSD?);
— поддержка разных СУБД (Oracle, MSSQL, MySQL, PostgreSQL);
— широкий спектр поддерживаемых версий ОС — от самых старых Windows Server 2003 или Oracle Linux 5 и выше, учитывая различные ОС клиентов;
— широкий спектр поддерживаемых версий СУБД — от самых старых PostgreSQL 9.4 или MariaDB 5.5, которые уже не поддерживаются, и выше;
— поддержка пула соединений к СУБД, учитывая стоимость установки соединения с базой;
— работа за NAT, поддержка шифрования (PSK/SSL) при работе с Zabbix Server (proxy), учитывая требования служб безопасности, а также тот факт, что многие базы данных находятся в закрытых сетях без выхода в Интернет, и единственным способом выхода в открытые сети — пограничный маршрутизатор с функцией NAT;
— быстрая работа агента-мониторинга для частого опроса состояния СУБД и малое потребление ресурсов (CPU, RAM);
— готовые модульные шаблоны под разные СУБД (Oracle, MSSQL, MySQL, PostgreSQL);
— максимально простая установка и настройка агента, чтобы его мог установку сам заказчик не обладая высокими техническими навыками;
— компактное решение — минимум зависимостей от сторонних библиотек, чтобы обеспечить возможность работы без выхода в Интернет и установки дополнительных модулей;
— возможность кастомизации собираемых данных без перекомпиляции/изменения кода самого агента, т. е. возможность написания кастомизированных SQL запросов в файле конфигурации;
— открытый исходный код, чтобы обеспечить возможность модернизации.

Инструменты Zabbix для мониторинга баз данных
1. ODBC мониторинг (встроенный модуль Zabbix)

Преимущества

— Встроен в Zabbix.
— Поддерживает большое количество СУБД (Oracle, MySQL, PostgreSQL, MSSQL, IBM DB2, MongoDB, Firebird и т. д.);
— Официальные шаблоны для популярных СУБД (MySQL, MSSQL, Oracle) (с февраля 2020 г.);

Недостатки

— Работает только на сервере, где запущен zabbix-server и zabbix-proxy, поэтому для мониторинга необходимо прямое соединение с СУБД, проводить мониторинг СУБД, находящихся за NAT — невозможно;
— Нет поддержки пула соединений. Каждый запрос — это новое соединение с СУБД (в версии 4.4 появился db.odbc.get, поэтому можно минимизировать количество запросов, и предобрабатывать данные);
— Платформенно-зависимое решение (решение нельзя использовать там где нет Linux-серверов);

2. Zabbix agent с помощью UserParameter (сторонние скрипты на bash/python/powershell/и т. д.)

Преимущества

— Работает непосредственно на сервере с СУБД (активный или пассивный режим агента, при активном NAT не страшен);
— Быстро и относительно легко можно написать свое решение;
— Кросс-платформенность за счет скриптов на разных языках;

Недостатки

— Нет поддержки пула соединений. Каждый запуск скрипта — это новое соединение с СУБД;
— При большом количестве собираемых метрик и высокой частоте опроса возрастает нагрузка на сервер (CPU, RAM);
— Нет единого решения под Windows/Linux/AIX и разные СУБД;
— Невозможность использования решения из-за инфраструктурных ограничений или политики безопасности (например, в отношении сторонних скриптов);
— Необходимо ставить дополнительное ПО (например, Python);

3. Модули для Zabbix Agent (libzbxpgsql, libzbxredis, zabbix-modulemysql и т. д.)

Преимущества

— Работают непосредственно на сервере СУБД (активный или пассивный режим агента, при активном NAT не страшен).

Недостатки

— Работают только на Linux;
— Каждый модуль рассчитан под определенную СУБД (нет единого модуля под все популярные СУБД);
— Поддержка многих модулей заброшена, модули и шаблоны не развиваются;
— Нет поддержки пула соединений. Каждый запрос — это новое соединение с СУБД;
— Многие модули нужно самостоятельно собирать из исходников, для этого нужен квалифицированный инженер;

4. Внешние агенты (mamonsu, DBforBIX, ZabbixDBA, zbxdb, zbxora и т. д.)

Преимущества

— Работают непосредственно на сервере СУБД (активный или пассивный режим агента, при активном NAT не страшен);
— Многие агенты кросс-платформенны, но не все проверены на Windows/AIX;
— Многие агенты поддерживают пул соединений;

Недостатки

— Некоторые агенты давно заброшены и не развиваются, нет готовых шаблонов под разные СУБД (DBforBIX, ZabbixDBA);
— Сложные настройки некоторых агентов (DBforBIX, zbxdb);
— Невозможность использования решения из-за инфраструктурных ограничений или политики безопасности (например, требуется PSK/SSL-шифрование при передаче данных мониторинга);
— Необходимо ставить дополнительное ПО (например Python, Java или Perl);

5. Zabbix Agent 2 (Redis, Memcached, PostgreSQL, MySQL, недавно появился плагин Oracle)

Преимущества

— Работает непосредственно на сервере с СУБД (активный или пассивный режим агента, при активном NAT не страшен, поддержка шифрования PSK/SSL);
— Написан на Golang — кросс-платформенный, но только под Linux и Windows;
— Поддержка мониторинга Redis, Memcached, PostgreSQL, MySQL «из коробки». Недавно появился плагин Oracle;
— С 17.09.2020 доступна поддержка в виде службы в Windows [ZBXNEXT 6023];

Недостатки

— Написан на Golang — недостаточно кросс-платформенный — AIX версии < 7.2 не поддерживается компилятором Golang, Solaris или FreeBSD под вопросом;
— Пока реализована поддержка далеко не всех популярных СУБД (нет MSSQL);
— Не поддерживает работу в виде демона в Linux;

Доработанный Zabbix Agent

Ни одно решение не отвечает всем требованиям компании. 2 года назад компания начала внедрение мониторинга СУБД с помощью Zabbix на основе UserParameter с использованием собственных скриптов и шаблонов.

— Для Linux/AIX — bash (1 скрипт, порядка 7000 строк кода);
— Для Windows — powershell/c# (несколько скриптов, 4000 строк кода);

Но через 2 года пройдя по всем проблемам, мы осознали, что нужно новое решение, которое бы отвечало нашим требованиям (см. выше). Примерно за 1 месяца (декабрь 2019) я доработал Zabbix agent (на Си) чтобы он мог осуществлять базовый мониторинг 3 популярных баз (Oracle, MySQL, PostgreSQL) под Windows/Linux/AIX.

Что может доработанный Zabbix-agent ?

— Агент остался кросс-платформенным (поддерживается сборка под Linux, Windows, AIX, Solaris, etc);
— Агент поддерживает мониторинг Oracle, MySQL, PostgreSQL, MSSQL на всех ОС без дополнительных скриптов (для Oracle полностью отказаться от скриптов и внешних утилит невозможно в виду специфики самой СУБД);
— Пула соединений пока нет, но планируется реализовать в ближайшее время (декабрь 2020);
— Zabbix Agent по-прежнему поддерживает мониторинг параметров ОС, шифрование (PSK/SSL) и другие базовые возможности;
— Быстрый мониторинг, малое потребление ресурсов CPU и RAM;

— Используются готовые модульные шаблоны для мониторинга Oracle, MySQL, PostgreSQL для разных ОС;

— Минимум настроек у агента;

— Для Oracle/MySQL нужно только указать логин и пароль для подключения к СУБД в zabbix_agentd_dbmon.conf, все остальное настраивается через макросы через веб-интерфейс.

— Для Oracle возможна работа как с подключением в формате Easy connect, так и через tnsname (опция OracleUseLocalEnv=1 + переменные среды ORACLE_SID/ORACLE_HOME или TWO_TASK/LOCAL);

— Для PostgreSQL/MySQL строка подключения полностью указывается через веб-интерфейс через макрос;

— Поддержка макросов для Oracle (красные – обязательные).

— Компактное решение с минимумом зависимостей;

— Для Windows используется всего 12 бинарных файлов + файл конфигурации zabbix_agentd_dbmon.conf, есть инсталлятор, в котором можно настроить базовые параметры;

— Для RedHat-подобных дистрибутивов используется собственный репозиторий агента, все ставиться из него — минимум телодвижений;

— Есть отдельные сборки агента под разные Oracle RDBMS (11g/12c/18c/19c) + скрипт на bash для автоматизации развертывания;

— Возможность кастомизации собираемых данных — возможность создавать собственные элементы данных и писать SQL запросы в файле конфигурации без перекомпиляции агента (пока реализовано для MySQL и PostgreSQL).

Доработанный Zabbix Agent в цифрах

Oracle

> 90 метрик Oracle (версии 10i/11g/12c/18c/19c), а так же Oracle RAC и Oracle ASM;

> 70 триггеров:

— мониторинг основных показателей экземпляра (uptime, доступность, статус, сессии, процессы, лимиты по дата-файлам, блокировки, статус archiver и т.д.);
— мониторинг Single database/Pluggable database (размер, role, open_mode, flashback и т. д.);
— мониторинг Fast Recovery Area (FRA);
— мониторинг бэкапов;
— мониторинг permanent, undo, temporary tablespace;
— мониторинг Dataguard (MRP status, apply и transport lag);
— мониторинг ошибок в alert.log (ORA-00600 и другие);
— мониторинг Archive Log Destination;
— мониторинг параметров экземпляра (изменение дефолтных параметров);
— мониторинг Automatic Storage Management (Oracle ASM);
— мониторинг работы листенера и сервисов;

MySQL

> 120 метрик MySQL (MySQL 5.5-7/8.0, MariaDB 5.5/10.1-4, Percona 5.6-7/8.0);

> 25 триггеров:

— мониторинг основных показателей экземпляра (uptime, доступность, версия, threads, query cache, slow query, innodb buffer pool и т. д.) и возможность легко добавлять новые наблюдаемые показатели через веб-интерфейс;
— мониторинг основных параметров (query cache, репликации) и возможность легко добавлять новые наблюдаемые параметры через веб-фронтенд;
— мониторинг и расчет основных показателей производительности (Buffer pool dirty, Buffer pool efficiency, Buffer pool utilization, Query cache efficiency и т. д);
— мониторинг каждой базы (размер, кодировки);
— мониторинг репликации (статус, лаг);
— мониторинг размеров больших таблиц (TOP10 по размеру, по количеству записей);
— мониторинг блокировок в InnoDB;
— мониторинг error.log на предмет ошибок, блокировок и т. д.

PostgreSQL

> 100 метрик PostgreSQL (9.4 – 12.2);

> 15 триггеров:

— мониторинг основных показателей экземпляра (uptime, доступность, версия);
— количество соединений в разных состояниях;
— чекпойнты;
— блокировки;
— подготовленные транзакции;
— процессы autovacuum;
— скорость генерации WAL;
— скорость чтения и записи;
— размеры БД, deadlock и т. д.

Планы на будущее

— Разработка мониторинга MSSQL (ноябрь 2020);
— Реализация пула соединений к СУБД (декабрь 2020);
— Расширение возможностей легкой кастомизации собираемых данных без перекомпиляции агента;