pgbouncer_exporter

pgbouncer_exporter — экспорт метрик Prometheus для pgbouncer

Синтаксис

pgbouncer_exporter [параметры]

Описание #

pgbouncer_exporter — это экспортёр Prometheus для pgbouncer. По умолчанию экспортирует метрики в 9127/metrics.

Установка и настройка #

Расширение pgbouncer_exporter поставляется вместе с Postgres Pro Standard в виде отдельного пакета pgbouncer_exporter (подробные инструкции по установке приведены в Главе 16). После установки pgbouncer_exporter поменяйте конфигурацию pgbouncer, чтобы параметр подключения драйвера PostgreSQL игнорировался. В файл pgbouncer.ini добавьте:

ignore_startup_parameters = extra_float_digits

Метрики #

В таблице ниже перечислены экспортируемые метрики:

Таблица I.3. Метрики

Столбец pgbouncerМетрика PrometheusОписание
stats.total_query_countpgbouncer_stats_queries_pooled_totalОбщее количество SQL-запросов, прошедших через pgbouncer
stats.total_query_timepgbouncer_stats_queries_duration_seconds_totalОбщее время в секундах, в течение которого pgbouncer использовал подключения к Postgres Pro, выполняя запросы
stats.total_receivedpgbouncer_stats_received_bytes_totalОбщий объём сетевого трафика, который получил pgbouncer; отображается как bytes (байты)
stats.total_requestspgbouncer_stats_queries_totalОбщее количество SQL-запросов, прошедших через pgbouncer; отображается как requests (запросы)
stats.total_sentpgbouncer_stats_sent_bytes_totalОбщий объём сетевого трафика, который передал pgbouncer; отображается как bytes (байты)
stats.total_wait_timepgbouncer_stats_client_wait_seconds_totalВремя ожидания клиентами ответов сервера в секундах
stats.total_xact_countpgbouncer_stats_sql_transactions_pooled_totalОбщее количество SQL-транзакций, прошедших через pgbouncer
stats.total_xact_timepgbouncer_stats_server_in_transaction_seconds_totalОбщее время в секундах, в течение которого pgbouncer использовал подключения к Postgres Pro, выполняя запросы или простаивая
pools.cl_activepgbouncer_pools_client_active_connectionsЧисло клиентских подключений, которые связаны с подключением к серверу и могут обрабатывать запросы; отображается как connection (подключение)
pools.cl_waitingpgbouncer_pools_client_waiting_connectionsЧисло клиентских подключений, которые ожидают подключения к серверу; отображается как connection (подключение)
pools.sv_activepgbouncer_pools_server_active_connectionsЧисло серверных подключений, которые связаны с клиентским подключением; отображается как connection (подключение)
pools.sv_idlepgbouncer_pools_server_idle_connectionsЧисло серверных подключений, которые простаивают и готовы к запросу от клиента; отображается как connection (подключение)
pools.sv_usedpgbouncer_pools_server_used_connectionsЧисло серверных подключений, простаивающие дольше server_check_delay, для которых необходимо выполнить запрос server_check_query; отображается как connection (подключение)
pools.sv_testedpgbouncer_pools_server_testing_connectionsЧисло серверных подключений, для которых в данный момент выполняются запросы server_reset_query или server_check_query; отображается как connection (подключение)
pools.sv_loginpgbouncer_pools_server_login_connectionsЧисло серверных подключений, через которые в данный момент выполняется вход на сервер; отображается как connection (подключение)
pools.maxwaitpgbouncer_pools_client_maxwait_secondsВозраст самого старого клиентского подключения в очереди; отображается в секундах
config.max_client_connpgbouncer_config_max_client_connectionsМаксимальное количество клиентских подключений
config.max_user_connectionspgbouncer_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

Вывести или не выводить версию приложения.

TLS и базовая аутентификация #

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/