Мониторинг серверов 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

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

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

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

Похожие записи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через…

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

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

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

Читать еще статьи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда