Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

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 (анализ тяжелых запросов).

Полезные материалы
Рекомендуем