Мониторинг серверов PostgreSQL при помощи Zabbix

Мониторинг серверов баз данных при помощи заббикс для поиска узких мест и анализа производительности довольно распостраненная практика. Настроить глубокий мониторинг и сбор статистики сердствами современного Zabbix-сервера и Zabbix Agent 2, это очень просто и сейчас я расскажу как это реализовать.

Вступление

Настройка

Устанавливаем плагин для мониторинга 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

Но поверьте, это того стоит (тем более, что мы все равно мониторинг уложили на период миграции, так сделать все сразу и нормально).

Что еще можно подправить

Тут вопрос конечно интересный и приходит в голову хранение данных и трендов за период который может заинтересовать. Например, реальные данные мне нужны за месяц, а тренды за три месяца и глубже меня не интересует для небольшого проектика, а например для банка уже надо года три чуть ли не точных данных. Вот тут можно хорошо сэкономить на реально занимаемом месте в базе если у вас есть понимание какая глубина хранения данных вам нужна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *