Настройки 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_connectionsgauge per poolЧисло активных TLS-соединений к PostgreSQL.
pg_doorman_server_tls_handshake_duration_secondshistogram per poolРаспределение длительности TLS handshake.
pg_doorman_server_tls_handshake_errors_totalcounter per poolСчётчик неуспешных handshake. Алертить при ненулевой скорости.

Подробнее — см. Клиентский и серверный TLS.

Дашборд Grafana

Вы можете создать дашборд Grafana для визуализации этих метрик. Вот простой пример панелей, которые имеет смысл добавить:

  1. Число соединений по типу
  2. Использование памяти со временем
  3. Число клиентов и серверов по пулам
  4. Перцентили производительности запросов и транзакций
  5. Сетевой трафик по пулам

Примеры запросов

Несколько примеров запросов 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])