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:
Откройте раздел настройки агента
Добавьте новый экспортер
postgres_exporterУкажите параметры запуска
Через файл конфигурации:
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:
PostgreSQL Database Dashboard (ID: 9628)
Примечание
Подробнее о настройке 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_*)
Метрика |
Тип |
Описание |
|---|---|---|
|
Gauge |
Количество активных подключений к базе данных |
|
Counter |
Количество зафиксированных транзакций |
|
Counter |
Количество откаченных транзакций |
|
Counter |
Количество прочитанных дисковых блоков |
|
Counter |
Количество блоков, найденных в кэше |
|
Counter |
Количество возвращенных строк |
|
Counter |
Количество извлеченных строк |
|
Counter |
Количество вставленных строк |
|
Counter |
Количество обновленных строк |
|
Counter |
Количество удаленных строк |
|
Counter |
Количество конфликтов репликации |
|
Counter |
Количество созданных временных файлов |
|
Counter |
Объем данных, записанных во временные файлы |
|
Counter |
Количество обнаруженных deadlocks |
|
Counter |
Время, затраченное на чтение данных с диска (мс) |
|
Counter |
Время, затраченное на запись данных на диск (мс) |
Метрики активности (pg_stat_activity_*)
Метрика |
Тип |
Описание |
|---|---|---|
|
Gauge |
Количество активных соединений по состоянию |
|
Gauge |
Максимальная длительность транзакции (секунды) |
Метрики фонового писателя (pg_stat_bgwriter_*)
Метрика |
Тип |
Описание |
|---|---|---|
|
Counter |
Количество запланированных контрольных точек |
|
Counter |
Количество запрошенных контрольных точек |
|
Counter |
Время записи во время контрольных точек (мс) |
|
Counter |
Время синхронизации во время контрольных точек (мс) |
|
Counter |
Количество буферов, записанных во время контрольных точек |
|
Counter |
Количество буферов, записанных фоновым писателем |
|
Counter |
Количество буферов, записанных серверными процессами |
|
Counter |
Количество буферов, принудительно синхронизированных серверными процессами |
|
Counter |
Количество выделенных буферов |
Метрики репликации (pg_stat_replication_*)
Метрика |
Тип |
Описание |
|---|---|---|
|
Gauge |
Последняя отправленная позиция LSN (Log Sequence Number) |
|
Gauge |
Последняя записанная позиция LSN на реплике |
|
Gauge |
Последняя синхронизированная позиция LSN на реплике |
|
Gauge |
Последняя примененная позиция LSN на реплике |
|
Gauge |
Задержка репликации в байтах |
|
Gauge |
Задержка репликации в секундах |
Метрики таблиц (pg_stat_user_tables_*)
Метрика |
Тип |
Описание |
|---|---|---|
|
Counter |
Количество последовательных сканирований таблицы |
|
Counter |
Количество строк, прочитанных при последовательном сканировании |
|
Counter |
Количество индексированных сканирований |
|
Counter |
Количество строк, извлеченных при индексированном сканировании |
|
Counter |
Количество вставленных строк |
|
Counter |
Количество обновленных строк |
|
Counter |
Количество удаленных строк |
|
Counter |
Количество HOT-обновлений (без изменения индексов) |
|
Gauge |
Оценочное количество живых строк |
|
Gauge |
Оценочное количество мертвых строк |
|
Gauge |
Количество измененных строк с последнего ANALYZE |
|
Gauge |
Время последнего VACUUM (Unix timestamp) |
|
Gauge |
Время последнего авто-VACUUM (Unix timestamp) |
|
Gauge |
Время последнего ANALYZE (Unix timestamp) |
|
Gauge |
Время последнего авто-ANALYZE (Unix timestamp) |
|
Counter |
Количество выполненных VACUUM |
|
Counter |
Количество выполненных авто-VACUUM |
|
Counter |
Количество выполненных ANALYZE |
|
Counter |
Количество выполненных авто-ANALYZE |
Метрики индексов (pg_stat_user_indexes_*)
Метрика |
Тип |
Описание |
|---|---|---|
|
Counter |
Количество сканирований индекса |
|
Counter |
Количество прочитанных индексированных строк |
|
Counter |
Количество извлеченных индексированных строк |
Метрики блокировок (pg_locks_*)
Метрика |
Тип |
Описание |
|---|---|---|
|
Gauge |
Количество блокировок по типу (AccessShareLock, RowShareLock, и т.д.) |
|
Gauge |
Количество предоставленных блокировок |
Метрики запросов (pg_stat_statements_*)
Эти метрики доступны только при включенном модуле pg_stat_statements:
Метрика |
Тип |
Описание |
|---|---|---|
|
Counter |
Количество выполнений запроса |
|
Counter |
Общее время выполнения запроса (мс) |
|
Gauge |
Минимальное время выполнения запроса (мс) |
|
Gauge |
Максимальное время выполнения запроса (мс) |
|
Gauge |
Среднее время выполнения запроса (мс) |
|
Gauge |
Стандартное отклонение времени выполнения (мс) |
|
Counter |
Общее количество возвращенных или затронутых строк |
|
Counter |
Количество попаданий в shared buffer cache |
|
Counter |
Количество прочитанных shared блоков |
|
Counter |
Количество измененных shared блоков |
|
Counter |
Количество записанных shared блоков |
|
Counter |
Количество попаданий в local buffer cache |
|
Counter |
Количество прочитанных local блоков |
|
Counter |
Количество измененных local блоков |
|
Counter |
Количество записанных local блоков |
|
Counter |
Количество прочитанных временных блоков |
|
Counter |
Количество записанных временных блоков |
|
Counter |
Время чтения блоков (мс) |
|
Counter |
Время записи блоков (мс) |
Системные метрики
Метрика |
Тип |
Описание |
|---|---|---|
|
Gauge |
Доступность PostgreSQL (1 = доступен, 0 = недоступен) |
|
Gauge |
Длительность последнего сбора метрик (секунды) |
|
Counter |
Общее количество сборов метрик |
|
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, а не просто перезагрузки конфигурации.