Настройки Prometheus
pg_doorman содержит экспортёр метрик Prometheus, который даёт детальное представление о производительности и поведении ваших пулов соединений. В этом документе описано, как включить и использовать экспортёр метрик Prometheus, а также какие метрики доступны.
Включение метрик Prometheus
Чтобы включить экспортёр метрик Prometheus, добавьте в конфигурационный файл следующее:
prometheus:
enabled: true
host: "0.0.0.0" # Хост, на котором сервер метрик будет принимать соединения
port: 9127 # Порт, на котором сервер метрик будет принимать соединения
Опции конфигурации
| Опция | Описание | По умолчанию |
|---|---|---|
enabled | Включить или отключить экспортёр метрик Prometheus. | false |
host | Хост, на котором экспортёр метрик Prometheus будет принимать соединения. | "0.0.0.0" |
port | Порт, на котором экспортёр метрик Prometheus будет принимать соединения. | 9127 |
Настройка Prometheus
Добавьте следующий job в конфигурацию Prometheus, чтобы собирать метрики с pg_doorman:
scrape_configs:
- job_name: 'pg_doorman'
static_configs:
- targets: ['<pg_doorman_host>:9127']
Замените <pg_doorman_host> на имя хоста или IP-адрес вашего инстанса pg_doorman.
Доступные метрики
pg_doorman экспортирует следующие метрики:
Системные метрики
| Метрика | Описание |
|---|---|
pg_doorman_total_memory | Общий объём памяти, выделенный процессу pg_doorman, в байтах. Позволяет отслеживать потребление памяти приложением. |
Метрики соединений
| Метрика | Описание |
|---|---|
pg_doorman_connection_count | Счётчик новых соединений по типу, обработанных pg_doorman. Типы: 'plain' (нешифрованные соединения), 'tls' (шифрованные соединения), 'cancel' (запросы на отмену соединения), 'total' (сумма всех соединений). |
Метрики сокетов (только Linux)
| Метрика | Описание |
|---|---|
pg_doorman_sockets | Счётчик сокетов, используемых pg_doorman, по типу сокета. Типы: 'tcp' (IPv4 TCP-сокеты), 'tcp6' (IPv6 TCP-сокеты), 'unix' (Unix domain sockets), 'unknown' (сокеты нераспознанного типа). Доступно только в Linux. |
Метрики пула
| Метрика | Описание |
|---|---|
pg_doorman_pools_clients | Число клиентов в пулах соединений по статусу, пользователю и базе. Значения статуса: 'idle' (подключён, но не выполняет запросы), 'waiting' (ждёт серверного соединения), 'active' (выполняет запросы). Помогает мониторить загрузку пулов и распределение клиентов. |
pg_doorman_pools_servers | Число серверов в пулах соединений по статусу, пользователю и базе. Значения статуса: 'active' (активно обслуживает клиентов) и 'idle' (доступен для новых соединений). Помогает мониторить доступность серверов и распределение нагрузки. |
pg_doorman_pools_bytes | Общее число байт, переданных через пулы соединений, по направлению, пользователю и базе. Значения направления: 'received' (байты, полученные от клиентов) и 'sent' (байты, отправленные клиентам). Полезно для мониторинга сетевого трафика и выявления соединений с большим объёмом данных. |
| pg_doorman_pool_size | Сконфигурированный максимальный размер пула на пользователя и базу. Полезен для расчёта оставшейся ёмкости пула вместе с pg_doorman_pools_servers. |
Метрики запросов и транзакций
| Метрика | Описание |
|---|---|
pg_doorman_pools_queries_percentile | Перцентили времени выполнения запросов по пользователю и базе. Значения перцентилей: '99', '95', '90', '50' (медиана). Значения в миллисекундах. Помогает выявлять медленные запросы и тренды производительности по разным пользователям и базам. |
pg_doorman_pools_transactions_percentile | Перцентили времени выполнения транзакций по пользователю и базе. Значения перцентилей: '99', '95', '90', '50' (медиана). Значения в миллисекундах. Помогает мониторить производительность транзакций и выявлять долгие транзакции, которые могут влиять на производительность базы. |
pg_doorman_pools_transactions_count | Счётчик транзакций, выполненных в пулах соединений, по пользователю и базе. Помогает отслеживать объём транзакций и выявлять пользователей или базы с высоким темпом транзакций. |
pg_doorman_pools_transactions_total_time | Общее время, потраченное на выполнение транзакций в пулах соединений, по пользователю и базе. Значения в миллисекундах. Помогает мониторить общую производительность транзакций и выявлять пользователей или базы с большим временем выполнения транзакций. |
pg_doorman_pools_queries_count | Счётчик запросов, выполненных в пулах соединений, по пользователю и базе. Помогает отслеживать объём запросов и выявлять пользователей или базы с высоким темпом запросов. |
pg_doorman_pools_queries_total_time | Общее время, потраченное на выполнение запросов в пулах соединений, по пользователю и базе. Значения в миллисекундах. Помогает мониторить общую производительность запросов и выявлять пользователей или базы с большим временем выполнения запросов. |
pg_doorman_pools_avg_wait_time | Среднее время ожидания клиентов в пулах соединений, по пользователю и базе. Значения в миллисекундах. Помогает мониторить время ожидания клиентов и выявлять потенциальные узкие места. |
Метрики auth_query
Эти метрики доступны только когда auth_query сконфигурирован для одного или нескольких пулов.
| Метрика | Описание |
|---|---|
pg_doorman_auth_query_cache | Метрики кеша auth_query по типу и базе. Типы: entries (текущее число закешированных учётных данных), hits (попадания в кеш с найденной валидной записью), misses (промахи в кеше, потребовавшие запроса к PostgreSQL), refetches (повторные запросы, вызванные ошибкой аутентификации с устаревшими учётными данными), rate_limited (попытки повторного запроса, ограниченные min_interval). |
pg_doorman_auth_query_auth | Результаты аутентификации auth_query по результату и базе. Результаты: success (успешная аутентификация) и failure (неверный пароль или несовпадение учётных данных). |
pg_doorman_auth_query_executor | Метрики executor auth_query по типу и базе. Типы: queries (всего запросов, выполненных к PostgreSQL для получения учётных данных) и errors (запросы, завершившиеся ошибкой подключения или выполнения). |
pg_doorman_auth_query_dynamic_pools | Метрики жизненного цикла динамических пулов auth_query по типу и базе. Типы: current (сейчас активные динамические пулы), created (всего пулов создано с момента старта), destroyed (всего пулов, собранных garbage collection или удалённых на RELOAD). Имеет смысл только в passthrough mode. |
Метрики серверов
| Метрика | Описание |
|---|---|
pg_doorman_servers_prepared_hits | Счётчик попаданий prepared statements в бэкендах баз по пользователю и базе. Помогает оценить эффективность prepared statements в снижении накладных расходов на парсинг запросов. |
pg_doorman_servers_prepared_misses | Счётчик промахов prepared statements в бэкендах баз по пользователю и базе. Помогает выявить запросы, которые могли бы выиграть от подготовки в prepared statements. |
Метрики серверного TLS
Активны, если включён TLS к PostgreSQL (server_tls_mode != "disable").
| Метрика | Тип | Описание |
|---|---|---|
pg_doorman_server_tls_connections | gauge per pool | Число активных TLS-соединений к PostgreSQL. |
pg_doorman_server_tls_handshake_duration_seconds | histogram per pool | Распределение длительности TLS handshake. |
pg_doorman_server_tls_handshake_errors_total | counter per pool | Счётчик неуспешных handshake. Алертить при ненулевой скорости. |
Подробнее — см. Клиентский и серверный TLS.
Дашборд Grafana
Вы можете создать дашборд Grafana для визуализации этих метрик. Вот простой пример панелей, которые имеет смысл добавить:
- Число соединений по типу
- Использование памяти со временем
- Число клиентов и серверов по пулам
- Перцентили производительности запросов и транзакций
- Сетевой трафик по пулам
Примеры запросов
Несколько примеров запросов Prometheus, которые могут быть полезны:
Темп подключений
rate(pg_doorman_connection_count{type="total"}[5m])
Загрузка пула
sum by (database) (pg_doorman_pools_clients{status="active"}) / sum by (database) (pg_doorman_pools_servers{status="active"} + pg_doorman_pools_servers{status="idle"})
Медленные запросы
pg_doorman_pools_queries_percentile{percentile="99"}
Время ожидания клиентов
pg_doorman_pools_avg_wait_time
Hit rate кеша auth_query
pg_doorman_auth_query_cache{type="hits"} / (pg_doorman_auth_query_cache{type="hits"} + pg_doorman_auth_query_cache{type="misses"})
Темп ошибок auth_query
rate(pg_doorman_auth_query_auth{result="failure"}[5m])