Мониторинг серверов баз данных при помощи заббикс для поиска узких мест и анализа производительности довольно распостраненная практика. Настроить глубокий мониторинг и сбор статистики сердствами современного Zabbix-сервера и Zabbix Agent 2, это очень просто и сейчас я расскажу как это реализовать.
Вступление
- Для мониторинга будет использоваться шаблон PostgreSQL by Zabbix agent 2 из поставки Zabbix Server 6.4.
- Обсуждение шаблона на официальном сайте https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/384190-%C2%A0discussion-thread-for-official-zabbix-template-db-postgresql
- Гит-репозитарий https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/postgresql_agent2
Настройка
Устанавливаем плагин для мониторинга Postgresql.
# apt-get install zabbix-agent2-plugin-postgresql
Создаем пользователя от имени которого Zabbix будет взаимодействовать с Postgresql.
# su postgres
$ psql
# CREATE USER zbx_monitor WITH PASSWORD 'xxPASSWORDxx' INHERIT;
# GRANT pg_monitor TO zbx_monitor;
Добавляем записи в pg_hba.conf.
host all zbx_monitor localhost trust
host all zbx_monitor 127.0.0.1/32 md5
host all zbx_monitor ::1/128 scram-sha-256
Перезапускаем сервисы.
# systemctl reload postgresql@15-main.service
# systemctl restart zabbix-agent2
Добавляем шаблон к настройкам хоста

В макросах хоста меняем параметры:
- {$PG.USER}
- {$PG.PASSWORD}
Переходим в раздел Latest data и проверяем, что данные поступают.

Как вы видите настройка без скриптов и костылей и не занимает много времени.
Оптимизация Zabbix Server
В большинстве случаев глубокая настройка Zabbix Server не требуется и достаточно так называемой дефолтной конфигурации. Однако, если вы мониторите крупный комплекс или собираете большое число метрик, то стоит задуматься о глубоком тюнинге.
Миграция на TimescaleDB
Миграция на TimescaleDB позволяет значительно повысить производительность и уменьшить общий объем базы данных, что позволяет сэкономить дисковое пространство.
Установка расширения Timescale в Postgresql
Подготовка репозитория и установка необходимых пакетов.
# apt install gnupg postgresql-common apt-transport-https lsb-release wget
# /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
# echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
# wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo apt-key add -
# apt-get update
# aptitude install timescaledb-2-postgresql-15 timescaledb-toolkit-postgresql-15
# timescaledb-tune --quiet --yes
# systemctl restart postgresql@15-main.service
Настройка Zabbix Server на использование Timescale DB
Включаем расширение TimescaleDB для базы данных Zabbix Server.
# su postgres
$ echo”CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;” | psql zabbix_db
В случае успеха получаем такую красоту.
WARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ \ ___ \
| | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ /
| | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \
| | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ /
|_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
Running version 2.12.2
For more information on TimescaleDB, please visit the following links:
1. Getting started: https://docs.timescale.com/timescaledb/latest/getting-started
2. API reference documentation: https://docs.timescale.com/api/latest
Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescale.com/timescaledb/latest/how-to-guides/configuration/telemetry.
CREATE EXTENSION
Мигрируем базу данных Zabbix Server на использование TimescaleDB. Два этапа:
- Останавливаем Zabbix Server и Web-интерфейс
- Запускаем скрипт миграции
- Запускаем сервисы
# systemctl stop zabbix-server
# mv /etc/nginx/conf.d/zabbix.conf /root/zabbix.conf
# su postgres
$ cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql | psql -h 127.0.0.1 -U zabbix_user zabbix_db
$ exit
# systemctl start zabbix-server
# mv /root/zabbix.conf /etc/nginx/conf.d/zabbix.conf
# systemctl reload nginx
Процесс не сильно быстрый и моя база на 6.4 ГБ смигрировала за 40 минут. Полученный результат определенно того стоил хотя вылезли немного подводных камней которые рассмотрим ниже (при миграции лучше тестировать реальное окружение и вылавливать подводные камни).
Главное из плюсов производительность поднялась значительно и база похудела с 6.4 ГБ до 2.1 ГБ
Проблемы миграции
При переезде я словил несколько неприятных нюансов.
Unsupported DB! timescaledb version is 21202 which is higher than maximum of 21199
Лечится добавлением в конфиг сервера параметра AllowUnsupportedDBVersions=1
Ошибка remaining connection slots are reserved for non-replication superuser connections
Докидываем число коннектов до 1000 на Master и Slave параметром max_connections = 1000
Реорганизация бызы и вакуум
После всех телодвижений, так-как структура базы знатно поменялось я бы рекомендовал сделать анализ и принудительный вакуум базы. Примерно вот таким образом (Но это тоже совсем не быстро и похудевшая до 2.1 ГБ база обрабатывалась 10 минут).
# su psql
$ vacuumdb -z zabbix_db
$ vacuumdb -f zabbix_db
Но поверьте, это того стоит (тем более, что мы все равно мониторинг уложили на период миграции, так сделать все сразу и нормально).
Что еще можно подправить
Тут вопрос конечно интересный и приходит в голову хранение данных и трендов за период который может заинтересовать. Например, реальные данные мне нужны за месяц, а тренды за три месяца и глубже меня не интересует для небольшого проектика, а например для банка уже надо года три чуть ли не точных данных. Вот тут можно хорошо сэкономить на реально занимаемом месте в базе если у вас есть понимание какая глубина хранения данных вам нужна.