pgbouncer_exporter — экспорт метрик Prometheus для pgbouncer
pgbouncer_exporter [параметры]
pgbouncer_exporter — это экспортёр Prometheus для pgbouncer. По умолчанию экспортирует метрики в 9127/metrics.
Расширение pgbouncer_exporter поставляется вместе с Postgres Pro Enterprise в виде отдельного пакета pgbouncer_exporter (подробные инструкции по установке приведены в Главе 17). После установки pgbouncer_exporter поменяйте конфигурацию pgbouncer, чтобы параметр подключения драйвера PostgreSQL игнорировался. В файл pgbouncer.ini добавьте:
ignore_startup_parameters = extra_float_digits
В таблице ниже перечислены экспортируемые метрики:
Таблица I.3. Метрики
| Столбец pgbouncer | Метрика Prometheus | Описание |
|---|---|---|
stats.total_query_count | pgbouncer_stats_queries_pooled_total | Общее количество SQL-запросов, прошедших через pgbouncer |
stats.total_query_time | pgbouncer_stats_queries_duration_seconds_total | Общее время в секундах, в течение которого pgbouncer использовал подключения к Postgres Pro, выполняя запросы |
stats.total_received | pgbouncer_stats_received_bytes_total | Общий объём сетевого трафика, который получил pgbouncer; отображается как bytes (байты) |
stats.total_requests | pgbouncer_stats_queries_total | Общее количество SQL-запросов, прошедших через pgbouncer; отображается как requests (запросы) |
stats.total_sent | pgbouncer_stats_sent_bytes_total | Общий объём сетевого трафика, который передал pgbouncer; отображается как bytes (байты) |
stats.total_wait_time | pgbouncer_stats_client_wait_seconds_total | Время ожидания клиентами ответов сервера в секундах |
stats.total_xact_count | pgbouncer_stats_sql_transactions_pooled_total | Общее количество SQL-транзакций, прошедших через pgbouncer |
stats.total_xact_time | pgbouncer_stats_server_in_transaction_seconds_total | Общее время в секундах, в течение которого pgbouncer использовал подключения к Postgres Pro, выполняя запросы или простаивая |
pools.cl_active | pgbouncer_pools_client_active_connections | Число клиентских подключений, которые связаны с подключением к серверу и могут обрабатывать запросы; отображается как connection (подключение) |
pools.cl_waiting | pgbouncer_pools_client_waiting_connections | Число клиентских подключений, которые ожидают подключения к серверу; отображается как connection (подключение) |
pools.sv_active | pgbouncer_pools_server_active_connections | Число серверных подключений, которые связаны с клиентским подключением; отображается как connection (подключение) |
pools.sv_idle | pgbouncer_pools_server_idle_connections | Число серверных подключений, которые простаивают и готовы к запросу от клиента; отображается как connection (подключение) |
pools.sv_used | pgbouncer_pools_server_used_connections | Число серверных подключений, простаивающие дольше server_check_delay, для которых необходимо выполнить запрос server_check_query; отображается как connection (подключение) |
pools.sv_tested | pgbouncer_pools_server_testing_connections | Число серверных подключений, для которых в данный момент выполняются запросы server_reset_query или server_check_query; отображается как connection (подключение) |
pools.sv_login | pgbouncer_pools_server_login_connections | Число серверных подключений, через которые в данный момент выполняется вход на сервер; отображается как connection (подключение) |
pools.maxwait | pgbouncer_pools_client_maxwait_seconds | Возраст самого старого клиентского подключения в очереди; отображается в секундах |
config.max_client_conn | pgbouncer_config_max_client_connections | Максимальное количество клиентских подключений |
config.max_user_connections | pgbouncer_config_max_user_connections | Максимальное количество серверных подключений для пользователя |
Синтаксис:
pgbouncer_exporter [--[no-]help] [--help-long] [--log-level=info] [--log-format=logfmt] [--pgBouncer.connectionString="postgres://postgres:@localhost:6543/pgbouncer?sslmode=disable"] [--web.telemetry-path="/metrics"] [--pgBouncer.pid-file=""] [--[no-]web.systemd-socket] [--web.listen-address=:9127...] [--web.config.file=""] [--[no-]version]
-h--[no-]helpВывести или не выводить справку, зависящую от контекста.
--help-longВывести справку по приложению.
--log-levelПисать в журнал только сообщения с заданным уровнем важности или выше. Возможные значения — debug, info, warn, error. Значение по умолчанию — info.
--log.formatФормат вывода сообщений журнала. Возможные значения — logfmt или json. Значение по умолчанию — logfmt.
--pgBouncer.connectionStringСтрока подключения для доступа к pgbouncer. Значение по умолчанию — "postgres://postgres:@localhost:6543/pgbouncer?sslmode=disable". Значение также можно задать через переменную окружения PGBOUNCER_EXPORTER_CONNECTION_STRING.
--web.telemetry-pathПуть для экспорта метрик. Значение по умолчанию — "/metrics".
--pgBouncer.pid-fileПуть к PID-файлу pgbouncer. Если он указан, метрики стандартного процесса экспортируются для процесса pgbouncer с префиксом «pgbouncer_process_». У экспортёра pgbouncer_process должны быть права на чтение файлов, которыми владеет процесс pgbouncer. Зависит от доступности /proc. За подробной информацией обратитесь к https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics.
--[no-]web.systemd-socketИспользовать или не использовать приёмники для активации systemd-сокетов вместо приёмников с портов (только для Linux).
--web.listen-addressАдреса для доступа к метрикам и веб-интерфейсу. Можно использовать несколько раз для разных адресов. Например: ':9100' или '[::1]:9100' для HTTP, 'vsock://:9100' для VSOCK (Virtual Machine Sockets, сокеты виртуальной машины). Значение по умолчанию — ':9127'.
--web.config.fileПуть к файлу конфигурации, позволяющему включать TLS или аутентификацию. За подробной информацией обратитесь к Разделу «TLS и базовая аутентификация».
--[no-]versionВывести или не выводить версию приложения.
pgbouncer_exporter поддерживает TLS и базовую аутентификацию. Чтобы использовать TLS и/или базовую аутентификацию, необходимо передать YAML-файл конфигурации, используя параметр --web.config.file. Формат файла следующий:
tls_server_config:
# Сертификат, используемый сервером для аутентификации клиента.
# Предполагается передача в виде строки с закодированной последовательностью байтов в формате PEM.
#
# ПРИМЕЧАНИЕ: При передаче сертификата напрямую, cert_file указывать ниже не нужно.
[ cert: <string> ]
# Ключ, используемый сервером для аутентификации клиента.
# Предполагается передача в виде строки с закодированной последовательностью байтов в формате PEM.
#
# ПРИМЕЧАНИЕ: При передаче ключа напрямую, key_file указывать ниже не нужно.
[ key: <secret> ]
# Сертификат ЦС для аутентификации клиента по сертификату на стороне сервера.
# Предполагается передача в виде строки с закодированной последовательностью байтов в формате PEM.
#
# ПРИМЕЧАНИЕ: При передаче сертификата ЦС напрямую, client_ca_file указывать ниже не нужно.
[ client_ca: <string> ]
# Файлы сертификата и ключа, используемых сервером для аутентификации клиента.
cert_file: <filename>
key_file: <filename>
# Политика сервера для аутентификации клиента. Сопоставляется с политиками ClientAuth.
# За подробной информацией о параметрах ClientAuth обратитесь к
# https://golang.org/pkg/crypto/tls/#ClientAuthType
#
# ПРИМЕЧАНИЕ: Чтобы включить аутентификацию для клиента, используйте
# RequireAndVerifyClientCert. Другие значения небезопасны.
[ client_auth_type: <string> | default = "NoClientCert" ]
# Сертификат ЦС для аутентификации клиента по сертификату на стороне сервера.
[ client_ca_file: <filename> ]
# Проверить, что у клиентского сертификата есть дополнительное имя субъекта (SAN),
# которое полностью соответствует записи в этом списке, и в случае несоответствия прервать
# соединение. SAN может иметь один или несколько из следующих форматов: DNS,
# IP, e-mail или URI-адрес из https://pkg.go.dev/crypto/x509#Certificate.
[ client_allowed_sans:
[ - <string> ] ]
# Минимальная допустимая версия TLS.
[ min_version: <string> | default = "TLS12" ]
# Максимальная допустимая версия TLS.
[ max_version: <string> | default = "TLS13" ]
# Список поддерживаемых наборов шифров для версий TLS до TLS 1.2. Если значение не задано,
# используется набор шифров Go по умолчанию. Доступные наборы шифров описаны
# в документации go:
# https://golang.org/pkg/crypto/tls/#pkg-constants
#
# Обратите внимание, что поддерживаются только шифры, возвращаемые следующей функцией:
# https://pkg.go.dev/crypto/tls#CipherSuites
[ cipher_suites:
[ - <string> ] ]
# prefer_server_cipher_suites определяет, выбирает ли сервер
# набор шифров, предпочтительный для клиента, или набор шифров, предпочтительный
# для сервера. При значении true учитывается приоритетность шифров для сервера,
# которая определяется порядком элементов в cipher_suites.
[ prefer_server_cipher_suites: <boo> | default = true ]
# Эллиптические кривые, которые будут использоваться для согласования по ECDHE в порядке
# предпочтения. Доступные кривые описаны в документации go:
# https://golang.org/pkg/crypto/tls/#CurveID
[ curve_preferences:
[ - <string> ] ]
http_server_config:
# Включить поддержку HTTP/2. Обратите внимание, что HTTP/2 поддерживается только с TLS.
# Этот параметр нельзя изменить на лету.
[ http2: <boolean> | default = true ]
# Список заголовков, которые можно добавить к HTTP-ответам.
[ headers:
# Установить заголовок Content-Security-Policy для HTTP-ответов.
# Заголовок не установлен, если значение не задано.
[ Content-Security-Policy: <string> ]
# Установить заголовок X-Frame-Options для HTTP-ответов.
# Заголовок не установлен, если значение не задано. Допустимые значения — deny и sameorigin.
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
[ X-Frame-Options: <string> ]
# Установить заголовок X-Content-Type-Options для HTTP-ответов.
# Заголовок не установлен, если значение не задано. Допустимое значение — nosniff.
# https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/X-Content-Type-Options
[ X-Content-Type-Options: <string> ]
# Установить заголовок X-XSS-Protection для всех ответов.
# Заголовок не установлен, если значение не задано.
# https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/X-XSS-Protection
[ X-XSS-Protection: <string> ]
# Установить заголовок Strict-Transport-Security для HTTP-ответов.
# Заголовок не установлен, если значение не задано.
# Используйте этот заголовок с осторожностью, так как он может заставить
# браузеры загрузить Prometheus и другие приложения, размещённые на одном
# домене и поддоменах через HTTPS.
# https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Strict-Transport-Security
[ Strict-Transport-Security: <string> ] ]
# Имена пользователей и хешированные пароли для полного доступа к веб-
# серверу, используя механизм базовой аутентификации. Если значение не установлено, базовая аутентификация не
# требуется. Пароли хешируются с помощью bcrypt.
basic_auth_users:
[ <string>: <secret> ... ]
# Ограничение запросов в конечной точке, используя набор токенов
rate_limit:
interval: <duration> # время между двумя запросами; установите значение 0, чтобы отключить ограничитель
burst: <int> # и разрешение на пакетную передачу <int> запросов.Где общие местозаполнители определяются следующим образом:
<boolean>: логическое значение true или false
<filename>: путь в текущем рабочем каталоге
<secret>: обычная строка, которая является секретом, таким как пароль
<string>: обычная строка
<int>: целое число
<duration>: временной интервал
Например:
# Пример конфигурации TLS и базовой аутентификации. # # Кроме того, требуются сертификат и файл ключа. tls_server_config: cert_file: server.crt key_file: server.key # Имена пользователей и пароли необходимы для подключения. # Пароли хешируются с помощью bcrypt: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md#about-bcrypt. basic_auth_users: alice: $2y$10$mDwo.lAisC94iLAyP81MCesa29IzH37oigHC/42V2pdJlUprsJPze bob: $2y$10$hLqFl9jSjoAAy95Z/zw8Ye8wkdMBM8c5Bn1ptYqP/AXyV0.oy0S8m # Ограничение запросов в конечной точке с использованием набора токенов rate_limit: interval: "1s" # время между двумя запросами; установите значение 0, чтобы отключить ограничитель burst: 20 # и разрешение на пакетную передачу до 20 запросов.
Prometheus Monitoring Community: https://prometheus.io/community/