Компоненты коллектора

Ресиверы:

  • postgrespro
  • filelog
  • hostmetrics

Процессоры:

  • attributes
  • resource
  • batch

Экспортеры:

  • prometheus
  • otlphttp

Ресиверы

Postgrespro

Ресивер postgrespro является компонентом OpenTelemetryCollector и осуществляет сбор данных с экземпляров СУБД. Ресивер является внутренней разработкой компании PostgresPro и НЕ является частью открытой экосистемы OpenTelemetry.

Ресивер организован по модульному принципу и позволяет регулировать объем собираемых данных через включение модулей. Некоторые модули предусматривают дополнительную настройку.

Модули — это внутренние компоненты ресивера, отвечающие за сбор разных типов статистических данных. Каждый модуль предназначен для сбора конкретной информации, которая затем преобразуется в группы метрик. pgpro-otel-collector предоставляет группы метрик, описывающие различные подсистемы, события и процессы внутри системы управления базами данных (СУБД), такие, как использование таблиц и индексов, работа фоновых процессов, использование ресурсов запросами и т. д.

Количество статистических данных может варьироваться в зависимости от версии и редакции Postgres Pro, что ведёт к большой вариативности и сложности методов сбора. Ещё одна важная роль pgpro-otel-collector — скрывать эти отличия от систем мониторинга, в то же время предоставляя максимум информации о наблюдаемой системе.

Ресивер postgrespro содержит следующие модули:

  • activity — извлекает информацию об общей активности в экземпляре из представления pg_stat_activity.
  • archiver — извлекает статистику архивирования журнала предзаписи (WAL) из представления pg_stat_archiver.
  • bgwriter — извлекает статистику процессов фоновой записи и контрольных точек из представления pg_stat_bgwriter.
  • bloat_indexes — извлекает информацию о раздувании индексов.
  • bloat_tables — извлекает информацию о раздувании таблиц.
  • buffercache — отслеживает утилизацию общего кеша (требуется расширение pg_buffercache).
  • cfs — отслеживает использование сжатой файловой системы (CFS) (доступно только в Postgres Pro Enterprise).
  • databases — извлекает статистику использования баз данных из представления pg_stat_database.
  • functions — извлекает статистику утилизации пользовательских функций из представления pg_stat_user_functions.
  • hostmetrics — собирает метрики операционной системы.
  • indexes — извлекает статистику использования индексов из представлений pg_stat_user_indexes и pg_statio_user_indexes.
  • io — собирает метрики ввода/вывода (I/O) из представления pg_stat_io.
  • locks — извлекает информацию о состояниях блокировки и ожидания из представления pg_locks.
  • prepared_transactions — извлекает статистику подготовленных транзакций из представления pg_prepared_xacts.
  • replication — извлекает метрики о ведомых узлах и потоковой репликации из представлений pg_stat_replication и pg_stat_wal_receiver.
  • replication_slots — извлекает статистику использования репликации слотов из представления pg_replication_slots.
  • statements_generic — собирает общую статистику по запросам из представления pg_stat_statements.
  • statements_timing — собирает статистику по времени выполнения запросов из представления pg_stat_statements.
  • statements_planning — собирает статистику по времени планирования запросов из представления pg_stat_statements.
  • statements_shared_io — собирает статистику по утилизации общего кеша запросами из представления pg_stat_statements.
  • statements_local_io — собирает статистику утилизации локальных кешей запросами из представления pg_stat_statements.
  • statements_temp_io — собирает статистику утилизации временных файлов запросами из представления pg_stat_statements.
  • statements_wal — собирает статистику по количеству записей в WAL, вносимых запросами, из представления pg_stat_statements.
  • statements_jit — собирает статистику по использованию JIT запросами из представления pg_stat_statements.
  • statements_queries — извлекает информацию о текстах запросов из представления pg_stat_statements.
  • tables — извлекает статистику по использованию таблиц из представлений pg_stat_user_tables и pg_statio_user_tables.
  • tablespaces — извлекает статистику по использованию табличных пространств.
  • version — извлекает метрики с версией экземпляра Postgres Pro.
  • wait_sampling — извлекает метрики на основе выборки по событиям ожидания (требуется расширение pg_wait_sampling).
  • wal — извлекает статистику по количеству записей в WAL, вносимых экземпляром.

Каждый из этих модулей может предоставлять десятки видов метрик. В зависимости от числа объектов в экземпляре, количество метрик может исчисляться тысячами. Однако некоторые метрики или даже группы метрик могут быть не нужны. Поэтому pgpro-otel-collector позволяет включать и выключать нужные модули, таким образом контролируя количество и качество собираемых данных.

Важно: включение следующих модулей в некоторых обстоятельствах могут создавать значительную нагрузку на экземпляр СУБД. Модули выключены в конфигурации по умолчанию и их включение должно рассматриваться очень серьезно с должным уровнем ограничения сбора только по необходимым объектам.

  • bloat_indexes и bloat_tables - процедура оценки раздувания является ресурсоемкой и в случае большого количества таблиц может создавать избыточную нагрузку. Рекомендуется ограничивать сбор данных отдельными базами данных, схемами или даже таблицами. Также, данные о раздувании изменяются редко и их точность допускает некоторую погрешность, поэтому рекомендуется устанавливать длинный интервал между сборами данных, например 5 минут и более.
  • indexes и tables - таблицы и индексы содержат большое количество статистики и при большом количестве таблиц и индексов может генерироваться большое количество метрик - запись такого объема в хранилище метрик может вызвать проблемы производительности и не все эти метрики могут иметь конечную пользовательскую ценность. Рекомендуется ограничивать сбор данных отдельными базами данных, схемами или даже таблицами.
  • statements - в зависимости от нагрузки на экземпляр СУБД статистики по операторам может быть очень много, это может привести к генерации большого количества метрик и нагрузке на запись в хранилище метрик. В силу специфичности статистики операторов она не всегда может иметь достаточную пользовательскую ценность. Рекомендуется включать только те модули которые действительно представляют ценность в вашем случае.
  • statements_queries - в зависимости от длины текстов запросов в статистике операторов метрики могут быть иметь большие накладные расход при записи и хранении в хранилище метрик. Рекомендуется настройками коллектора ограничивать максимальную длину значений в метриках.

Filelog

Ресивер filelog является открытым компонентом OpenTelemetry, подробную информацию о ресивере можно получить тут.

Коллектор использует ресивер filelog для сбора журналов экземпляра СУБД - для этого нужно добавить ресивер filelog в секцию receivers и описать его настройку.

Настройка ресивера зависит от настроек экземпляра СУБД и используемого формата журнала (см. параметры logging_collector и log_destination). Коллектор поддерживает сбор журналов в формате CSV и JSON.

Hostmetrics

Ресивер hostmetrics является открытым компонентом OpenTelemetry, подробную информацию о ресивере можно получить тут.

Коллектор использует ресивер hostmetrics для сбора метрик операционной системы - для этого нужно добавить ресивер hostmetrics в секцию receivers и описать его настройку.

Процессоры

Attributes

Процессор attributes является открытым компонентом OpenTelemetry, подробную информацию о процессоре attributes можно получить тут.

Процессор attributes используется для обработки отдельных атрибутов записей журнала. Процессор нужно добавить в секцию processors и описать его настройку.

Настройка процессора также зависит от настроек экземпляра СУБД и используемого формата журнала (см. параметры logging_collector и log_destination).

Resource

Процессор resource является открытым компонентом OpenTelemetry, подробную информацию о процессоре resource можно получить тут.

Процессор resource используется для добавления дополнительных атрибутов записей журнала. Процессор нужно добавить в секцию processors и описать его настройку.

Настройка процессора также зависит от настроек экземпляра СУБД и используемого формата журнала (см. параметры logging_collector и log_destination).

Batch

Процессор batch является открытым компонентом OpenTelemetry, подробную информацию о процессоре batch можно получить тут.

Процессор batch используется для формирования пакетов данных и регулировки механизма отправки данных. Процессор нужно добавить в секцию processors и описать его настройку.

Экспортеры

Prometheus

Экспортер prometheus является открытым компонентом OpenTelemetry, подробную информацию о ресивере можно получить тут. Экспортер prometheus является наиболее простым в использовании. Экспортер не требует обязательной настройки внешних компонентов и может быть включен по умолчанию. Экспортер нужно добавить в секцию exporters и описать его настройку.

OTLPHTTP

Экспортер otlphttp является открытым компонентом OpenTelemetry, подробную информацию о ресивере можно получить тут. Экспортер otlphttp используется для отправки собранных метрик в OTLP-совместимую систему хранения или мониторинга которая предварительно должна быть развернута и доступна. Экспортер нужно добавить в секцию exporters и описать его настройку.