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

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

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

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

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

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

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

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

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

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS