Мониторинг PostgreSQL с postgres_exporter и Prometheus: Настройка метрик
- Отсутствие прозрачности в реальном времени по количеству подключений, транзакций в секунду (TPS) и Cache Hit Ratio.
- Внезапные остановки СУБД из-за переполнения диска файлами WAL или раздувания таблиц.
- Невозможность локализовать временные аномалии задержек запросов ретроспективно.
1. Создание сервисного пользователя мониторинга в PostgreSQL
CREATE USER postgres_exporter WITH PASSWORD 'Exporter_Secure_Password123!';
-- Назначение прав для чтения системной статистики (PostgreSQL 10+)
GRANT pg_monitor TO postgres_exporter;
-- Разрешение подключения в pg_hba.conf
-- host all postgres_exporter 127.0.0.1/32 scram-sha-2562. Установка и настройка postgres_exporter
Создайте конфигурационный файл окружения /etc/postgres_exporter/postgres_exporter.env:
DATA_SOURCE_NAME="postgresql://postgres_exporter:Exporter_Secure_Password123!@127.0.0.1:5432/postgres?sslmode=disable"
PG_EXPORTER_EXTEND_QUERY_PATH="/etc/postgres_exporter/queries.yaml"
PG_EXPORTER_DISABLE_DEFAULT_METRICS=false
PG_EXPORTER_DISABLE_SETTINGS_METRICS=false3. Настройка Systemd сервиса (/etc/systemd/system/postgres_exporter.service)
[Unit]
Description=Prometheus PostgreSQL Exporter
After=network.target postgresql.service
[Service]
User=prometheus
Group=prometheus
EnvironmentFile=/etc/postgres_exporter/postgres_exporter.env
ExecStart=/usr/local/bin/postgres_exporter
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable --now postgres_exporter4. Конфигурация Prometheus (prometheus.yml)
scrape_configs:
- job_name: 'postgresql'
scrape_interval: 15s
static_configs:
- targets: ['192.168.10.50:9187'] Частые вопросы (FAQ)
Какие ключевые метрики PostgreSQL необходимо ставить на круглосуточный алерт?
1. pg_stat_database_xact_commit / rollback (падение транзакций); 2. pg_stat_activity_count (исчерпание max_connections); 3. pg_replication_lag (отставание реплики в секундах/байтах); 4. pg_database_size_bytes; 5. age(datfrozenxid) (риск Wraparound).
Почему postgres_exporter показывает ошибку 'permission denied for table' при сборе кастомных метрик?
Пользователю postgres_exporter требуются явные права GRANT SELECT на прикладные таблицы, если вы собираете бизнес-метрики через файл кастомных запросов queries.yaml.
Как рассчитывается Cache Hit Ratio в метриках Prometheus?
Формула PromQL: sum(rate(pg_stat_database_blks_hit[5m])) / (sum(rate(pg_stat_database_blks_hit[5m])) + sum(rate(pg_stat_database_blks_read[5m]))) * 100.
Может ли опрос exporter создавать существенную нагрузку на базу данных?
При стандартном интервале сбора (15–30с) нагрузка незаметна. Однако избегайте добавления тяжелых кастомных запросов со сканированием pg_stat_statements или больших таблиц без индексов.