Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
PG_METRICS_EXPORTER Linux / DevOps

Настройка мониторинга PostgreSQL: postgres_exporter и системные представления pg_stat

Обновлено: 24.08.2026
  • Отсутствие прозрачности в утилизации пула соединений, транзакционной нагрузке и долгих блокировках.
  • Сложности с локализацией ресурсоемких SQL-запросов и скрытого разрастания WAL-журналов.
  • Необходимость интеграции метрик PostgreSQL в стек Prometheus / Grafana.

1. Включение сбора статистики в postgresql.conf

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = top
pg_stat_statements.max = 10000
track_io_timing = on
track_activity_query_size = 2048

Перезапустите PostgreSQL и создайте расширение:

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

2. Создание пользователя для мониторинга с минимальными привилегиями

CREATE USER postgres_exporter WITH PASSWORD 'StrongSecurePass123!';
GRANT pg_monitor TO postgres_exporter;

3. Установка и настройка postgres_exporter как systemd службы

Создайте файл /etc/systemd/system/postgres_exporter.service:

[Unit]
Description=Prometheus PostgreSQL Exporter
After=network.target

[Service]
User=postgres_exporter
Environment=DATA_SOURCE_NAME="postgresql://postgres_exporter:StrongSecurePass123!@127.0.0.1:5432/postgres?sslmode=disable"
ExecStart=/usr/local/bin/postgres_exporter --auto-discover-databases
Restart=always

[Install]
WantedBy=multi-user.target

4. Запуск и проверка сбора метрик

systemctl daemon-reload && systemctl enable --now postgres_exporter
curl -s http://localhost:9187/metrics | grep pg_stat_database
Практический опыт инженера: Используйте встроенную роль pg_monitor (доступна с PostgreSQL 10+) вместо предоставления прав суперпользователя. Это изолирует мониторинг и защитит конфиденциальные данные.

Частые вопросы (FAQ)

Зачем включать параметр track_io_timing = on?

Он позволяет PostgreSQL собирать точное время чтения и записи страниц на диск (read/write I/O time), что критично для выявления нехватки оперативной памяти и медленных накопителей в pg_stat_database и pg_stat_statements.

Какие представления pg_stat являются наиболее важными для мониторинга?

pg_stat_activity (текущие сессии и блокировки), pg_stat_database (транзакции, rollback, deadlocks), pg_stat_user_tables (live/dead tuples, vacuum) и pg_stat_statements (анализ тяжелых запросов).