PostgreSQL

PostgreSQL — объектно-реляционная СУБД с открытым исходным кодом. Мониторинг PostgreSQL позволяет отслеживать производительность запросов, использование ресурсов, состояние репликации, блокировки и другие критичные метрики для обеспечения стабильной работы базы данных.

Примечание

Данные с экспортеров могут использоваться для различных продуктов. Обратите внимание на использование тегов product и component в документации к конкретному продукту

Способы мониторинга

Для мониторинга PostgreSQL доступны два основных экспортера:

postgres_exporter

postgres_exporter — основной экспортер для сбора метрик PostgreSQL. Предоставляет детальную информацию о состоянии сервера, производительности запросов, использовании ресурсов и репликации.

Шаг 1: Подготовка PostgreSQL

Для корректной работы postgres_exporter требуется активировать сбор статистики в PostgreSQL.

Отредактируйте файл postgresql.conf:

# Запись информации о выполняемых запросах
track_activities = on

# Сбор статистики по таблицам и индексам
track_counts = on

# Тайминги операций ввода-вывода (требует pg_stat_statements)
track_io_timing = on

# Активирует модуль для анализа запросов (опционально, для детального мониторинга запросов)
shared_preload_libraries = 'pg_stat_statements'

Предупреждение

После изменения postgresql.conf необходимо перезапустить PostgreSQL:

sudo systemctl restart postgresql

Шаг 2: Создание пользователя для мониторинга

Создайте пользователя с правами для сбора статистики:

-- Подключитесь к PostgreSQL как суперпользователь
CREATE USER postgres_exporter WITH PASSWORD 'your_secure_password';

-- Предоставьте необходимые права
GRANT pg_monitor TO postgres_exporter;
GRANT CONNECT ON DATABASE postgres TO postgres_exporter;

Важно

Для работы postgres_exporter требуется пользователь с правами pg_monitor или pg_read_all_stats. Не используйте суперпользователя для мониторинга.

Шаг 3: Настройка подключения

Настройте строку подключения через переменную окружения или файл конфигурации.

Вариант 1: Переменная окружения

export DATA_SOURCE_NAME="postgresql://postgres_exporter:your_secure_password@localhost:5432/postgres?sslmode=disable"

Вариант 2: Файл .pgpass

Создайте файл ~/.pgpass с правами доступа 600:

echo "localhost:5432:postgres:postgres_exporter:your_secure_password" > ~/.pgpass
chmod 600 ~/.pgpass

Шаг 4: Настройка агента

Добавьте экспортер в конфигурацию агента через UI или файл конфигурации.

Через UI:

  1. Откройте раздел настройки агента

  2. Добавьте новый экспортер postgres_exporter

  3. Укажите параметры запуска

Через файл конфигурации:

exporters:
  enabled: true
  exporters:
    - name: postgres_exporter
      start_type: args
      args: "--web.listen-address=0.0.0.0:9187"
      address: 127.0.0.1:9187
      labels:
        product: postgresql
        component: database
        environment: production

Примечание

Если используется переменная окружения DATA_SOURCE_NAME, она должна быть доступна агенту при запуске экспортера.

Шаг 5: Проверка работы

Убедитесь, что метрики доступны:

curl http://localhost:9187/metrics

Должны отображаться метрики в формате Prometheus, включая метрики PostgreSQL.

Шаг 6: Визуализация

Рекомендуемый дашборд для Grafana:

Примечание

Подробнее о настройке postgres_exporter читайте в документации экспортера и официальном репозитории.

sql_exporter

sql_exporter — альтернативное решение для мониторинга SQL-запросов. Позволяет выполнять произвольные SQL-запросы и преобразовывать результаты в метрики Prometheus.

Примечание

sql_exporter подходит для мониторинга кастомных метрик и бизнес-логики, которые не покрываются стандартным postgres_exporter.

Шаг 1: Подготовка конфигурационного файла

Создайте файл конфигурации sql_exporter.yml:

jobs:
  - name: "postgresql_stats"
    interval: "30s"
    connections:
      - "postgresql://user:password@localhost:5432/dbname?sslmode=disable"
    queries:
      - name: "connection_stats"
        sql: "SELECT COUNT(*) as connections FROM pg_stat_activity"
        metrics:
          - name: "postgres_connections"
            type: "gauge"
            help: "Number of active connections"
            values: ["connections"]
      - name: "database_size"
        sql: "SELECT pg_database.datname, pg_database_size(pg_database.datname) as size_bytes FROM pg_database"
        metrics:
          - name: "postgres_database_size_bytes"
            type: "gauge"
            help: "Database size in bytes"
            values: ["size_bytes"]
            labels:
              database: "datname"

Шаг 2: Настройка агента

Добавьте экспортер в конфигурацию агента:

exporters:
  enabled: true
  exporters:
    - name: sql_exporter
      start_type: args
      args: "--config.file=/path/to/sql_exporter.yml --web.listen-address=0.0.0.0:9399"
      address: 127.0.0.1:9399
      labels:
        product: postgresql
        component: database

Шаг 3: Проверка работы

Убедитесь, что метрики доступны:

curl http://localhost:9399/metrics

Шаг 4: Дополнительная информация

Подробнее о настройке sql_exporter читайте в документации экспортера и официальном репозитории.

Ключевые метрики для мониторинга

При настройке мониторинга обратите внимание на следующие группы метрик:

  • Производительность: время выполнения запросов, количество запросов в секунду, медленные запросы

  • Ресурсы: использование CPU, памяти, дискового пространства, размер баз данных

  • Соединения: количество активных соединений, максимальное количество соединений, время ожидания

  • Репликация: состояние реплик, задержки репликации, лаг репликации

  • Блокировки: количество блокировок, время ожидания блокировок, deadlocks

  • Буферы и кэши: использование shared_buffers, эффективность кэширования

  • Ошибки: количество ошибок в логах, ошибки подключений

Собираемые метрики postgres_exporter

Ниже представлен список основных метрик, собираемых postgres_exporter, с их описанием и назначением.

Метрики баз данных (pg_stat_database_*)

Метрика

Тип

Описание

pg_stat_database_numbackends

Gauge

Количество активных подключений к базе данных

pg_stat_database_xact_commit

Counter

Количество зафиксированных транзакций

pg_stat_database_xact_rollback

Counter

Количество откаченных транзакций

pg_stat_database_blks_read

Counter

Количество прочитанных дисковых блоков

pg_stat_database_blks_hit

Counter

Количество блоков, найденных в кэше

pg_stat_database_tup_returned

Counter

Количество возвращенных строк

pg_stat_database_tup_fetched

Counter

Количество извлеченных строк

pg_stat_database_tup_inserted

Counter

Количество вставленных строк

pg_stat_database_tup_updated

Counter

Количество обновленных строк

pg_stat_database_tup_deleted

Counter

Количество удаленных строк

pg_stat_database_conflicts

Counter

Количество конфликтов репликации

pg_stat_database_temp_files

Counter

Количество созданных временных файлов

pg_stat_database_temp_bytes

Counter

Объем данных, записанных во временные файлы

pg_stat_database_deadlocks

Counter

Количество обнаруженных deadlocks

pg_stat_database_blk_read_time

Counter

Время, затраченное на чтение данных с диска (мс)

pg_stat_database_blk_write_time

Counter

Время, затраченное на запись данных на диск (мс)

Метрики активности (pg_stat_activity_*)

Метрика

Тип

Описание

pg_stat_activity_count

Gauge

Количество активных соединений по состоянию

pg_stat_activity_max_tx_duration

Gauge

Максимальная длительность транзакции (секунды)

Метрики фонового писателя (pg_stat_bgwriter_*)

Метрика

Тип

Описание

pg_stat_bgwriter_checkpoints_timed

Counter

Количество запланированных контрольных точек

pg_stat_bgwriter_checkpoints_req

Counter

Количество запрошенных контрольных точек

pg_stat_bgwriter_checkpoint_write_time

Counter

Время записи во время контрольных точек (мс)

pg_stat_bgwriter_checkpoint_sync_time

Counter

Время синхронизации во время контрольных точек (мс)

pg_stat_bgwriter_buffers_checkpoint

Counter

Количество буферов, записанных во время контрольных точек

pg_stat_bgwriter_buffers_clean

Counter

Количество буферов, записанных фоновым писателем

pg_stat_bgwriter_buffers_backend

Counter

Количество буферов, записанных серверными процессами

pg_stat_bgwriter_buffers_backend_fsync

Counter

Количество буферов, принудительно синхронизированных серверными процессами

pg_stat_bgwriter_buffers_alloc

Counter

Количество выделенных буферов

Метрики репликации (pg_stat_replication_*)

Метрика

Тип

Описание

pg_stat_replication_sent_lsn

Gauge

Последняя отправленная позиция LSN (Log Sequence Number)

pg_stat_replication_write_lsn

Gauge

Последняя записанная позиция LSN на реплике

pg_stat_replication_flush_lsn

Gauge

Последняя синхронизированная позиция LSN на реплике

pg_stat_replication_replay_lsn

Gauge

Последняя примененная позиция LSN на реплике

pg_stat_replication_lag

Gauge

Задержка репликации в байтах

pg_stat_replication_lag_seconds

Gauge

Задержка репликации в секундах

Метрики таблиц (pg_stat_user_tables_*)

Метрика

Тип

Описание

pg_stat_user_tables_seq_scan

Counter

Количество последовательных сканирований таблицы

pg_stat_user_tables_seq_tup_read

Counter

Количество строк, прочитанных при последовательном сканировании

pg_stat_user_tables_idx_scan

Counter

Количество индексированных сканирований

pg_stat_user_tables_idx_tup_fetch

Counter

Количество строк, извлеченных при индексированном сканировании

pg_stat_user_tables_n_tup_ins

Counter

Количество вставленных строк

pg_stat_user_tables_n_tup_upd

Counter

Количество обновленных строк

pg_stat_user_tables_n_tup_del

Counter

Количество удаленных строк

pg_stat_user_tables_n_tup_hot_upd

Counter

Количество HOT-обновлений (без изменения индексов)

pg_stat_user_tables_n_live_tup

Gauge

Оценочное количество живых строк

pg_stat_user_tables_n_dead_tup

Gauge

Оценочное количество мертвых строк

pg_stat_user_tables_n_mod_since_analyze

Gauge

Количество измененных строк с последнего ANALYZE

pg_stat_user_tables_last_vacuum

Gauge

Время последнего VACUUM (Unix timestamp)

pg_stat_user_tables_last_autovacuum

Gauge

Время последнего авто-VACUUM (Unix timestamp)

pg_stat_user_tables_last_analyze

Gauge

Время последнего ANALYZE (Unix timestamp)

pg_stat_user_tables_last_autoanalyze

Gauge

Время последнего авто-ANALYZE (Unix timestamp)

pg_stat_user_tables_vacuum_count

Counter

Количество выполненных VACUUM

pg_stat_user_tables_autovacuum_count

Counter

Количество выполненных авто-VACUUM

pg_stat_user_tables_analyze_count

Counter

Количество выполненных ANALYZE

pg_stat_user_tables_autoanalyze_count

Counter

Количество выполненных авто-ANALYZE

Метрики индексов (pg_stat_user_indexes_*)

Метрика

Тип

Описание

pg_stat_user_indexes_idx_scan

Counter

Количество сканирований индекса

pg_stat_user_indexes_idx_tup_read

Counter

Количество прочитанных индексированных строк

pg_stat_user_indexes_idx_tup_fetch

Counter

Количество извлеченных индексированных строк

Метрики блокировок (pg_locks_*)

Метрика

Тип

Описание

pg_locks_lock_mode

Gauge

Количество блокировок по типу (AccessShareLock, RowShareLock, и т.д.)

pg_locks_granted

Gauge

Количество предоставленных блокировок

Метрики запросов (pg_stat_statements_*)

Эти метрики доступны только при включенном модуле pg_stat_statements:

Метрика

Тип

Описание

pg_stat_statements_calls

Counter

Количество выполнений запроса

pg_stat_statements_total_time

Counter

Общее время выполнения запроса (мс)

pg_stat_statements_min_time

Gauge

Минимальное время выполнения запроса (мс)

pg_stat_statements_max_time

Gauge

Максимальное время выполнения запроса (мс)

pg_stat_statements_mean_time

Gauge

Среднее время выполнения запроса (мс)

pg_stat_statements_stddev_time

Gauge

Стандартное отклонение времени выполнения (мс)

pg_stat_statements_rows

Counter

Общее количество возвращенных или затронутых строк

pg_stat_statements_shared_blks_hit

Counter

Количество попаданий в shared buffer cache

pg_stat_statements_shared_blks_read

Counter

Количество прочитанных shared блоков

pg_stat_statements_shared_blks_dirtied

Counter

Количество измененных shared блоков

pg_stat_statements_shared_blks_written

Counter

Количество записанных shared блоков

pg_stat_statements_local_blks_hit

Counter

Количество попаданий в local buffer cache

pg_stat_statements_local_blks_read

Counter

Количество прочитанных local блоков

pg_stat_statements_local_blks_dirtied

Counter

Количество измененных local блоков

pg_stat_statements_local_blks_written

Counter

Количество записанных local блоков

pg_stat_statements_temp_blks_read

Counter

Количество прочитанных временных блоков

pg_stat_statements_temp_blks_written

Counter

Количество записанных временных блоков

pg_stat_statements_blk_read_time

Counter

Время чтения блоков (мс)

pg_stat_statements_blk_write_time

Counter

Время записи блоков (мс)

Системные метрики

Метрика

Тип

Описание

pg_up

Gauge

Доступность PostgreSQL (1 = доступен, 0 = недоступен)

pg_exporter_last_scrape_duration_seconds

Gauge

Длительность последнего сбора метрик (секунды)

pg_exporter_scrapes_total

Counter

Общее количество сборов метрик

pg_exporter_scrape_errors_total

Counter

Количество ошибок при сборе метрик

Примечание

Важно: Данный список метрик может быть неполным или устаревшим, так как postgres_exporter постоянно развивается и добавляет новые метрики. Для получения актуального и полного списка метрик рекомендуется обращаться к официальной документации postgres_exporter на GitHub, где представлен актуальный список всех собираемых метрик с подробными описаниями.

Необходимые настройки PostgreSQL

Для полноценного мониторинга убедитесь, что в postgresql.conf включены следующие параметры:

Базовый мониторинг

# Отслеживание активности
track_activities = on

# Сбор статистики
track_counts = on

# Тайминги операций
track_io_timing = on

Расширенный мониторинг запросов

# Активирует модуль для анализа запросов
shared_preload_libraries = 'pg_stat_statements'

# Отслеживает все запросы
pg_stat_statements.track = all

# Максимальное количество отслеживаемых запросов
pg_stat_statements.max = 10000

Предупреждение

Изменение shared_preload_libraries требует полного перезапуска PostgreSQL, а не просто перезагрузки конфигурации.

Дополнительная информация

Связанные разделы