9.3. Проблемы с экспортёром prometheus #
Экспортёр prometheus не предназначен для обработки и передачи больших объёмов метрик.
Рассмотрим сценарий, в котором в базе данных Postgres Pro содержится 10 000 таблиц и 10 000 индексов. Используем следующий расширенный набор плагинов:
hostmetrics: cpu (utilization), disk, filesystem, load, memory, network, paging, processespostgrespro: activity, archiver, bgwriter, bloat_indexes, bloat_tables, cache, databases, functions, indexes, io, locks, replication, replication_slots, tables, tablespaces, version, wal
В этом сценарии ожидается следующая нагрузка:
использование оперативной памяти коллектором — не меньше 3 ГиБ;
время полной загрузки страницы метрик — 8-10 секунд;
нагрузка на процессор — 30-50% в проведённых тестах (1 ядро).
Если на сервере доступно меньше 3 ГиБ оперативной памяти, работа коллектора может быть прекращена в рамках уничтожения процессов при нехватке памяти. При этом другие процессы затронуты не будут.
В этой конфигурации коллектор создаёт более 390 000 записей с метриками.
Используйте таблицу ниже, чтобы оценить количество метрик.
| Имя плагина | Количество метрик на объект |
|---|---|
| tables | 31 на таблицу |
| indexes | 6 на индекс (+1, если у индекса недопустимое значение) |
| bloat_tables | 1 на таблицу |
| bloat_indexes | 1 на индекс |
Поэтому для 100 000 таблиц и 100 000 индексов количество метрик для перечисленных выше плагинов составит не менее 3 900 000.
При передаче сотен тысяч метрик через экспортёр prometheus с использованием pull-модели в журналах pgpro-otel-collector может встретиться следующая ошибка:
{
"level": "error",
"ts": "2025-09-05T17:40:25.575+0300",
"msg": "error encoding and sending metric family: write tcp 127.0.0.1:8889->127.0.0.1:44930: write: broken pipe\n",
"resource": {
"service.instance.id": "62cc1e9c-a53f-423e-9c6f-41b1f6a0872a",
"service.name": "pgpro-otel-collector",
"service.version": "v0.4.0"
},
"otelcol.component.id": "prometheus",
"otelcol.component.kind": "exporter",
"otelcol.signal": "metrics"
}Это ошибка указывает на то, что экспортёр prometheus не может скачать метрики за отведённое время. Чтобы исправить эту проблему, используйте следующие обходные решения:
Увеличение тайм-аута
В конфигурации
prometheusукажите тайм-аут больше значения по умолчанию:global: scrape_interval: 15s # По умолчанию = 1m scrape_timeout: 15s # Увеличьте тайм-аут глобально или через scrape_config (по умолчанию = 10s)
Уменьшение объёма метрик
Чтобы уменьшить общий объём передаваемых метрик, настройте сбор данных из определённых объектов:
receivers: postgrespro: plugins: tables: enabled: true databases: - name: имя_бд schemas: - name: имя_схемы tables: - name: имя_таблицы indexes: enabled: true databases: - name: имя_бд schemas: - name: имя_схемы tables: - name: имя_таблицы indexes: - name: имя_индекса bloat_tables: enabled: true fetcher: batch_size: 10000 collection_interval: 5m databases: - name: имя_бд schemas: - name: имя_схемы tables: - name: имя_таблицы bloat_indexes: enabled: true fetcher: batch_size: 10000 collection_interval: 5m databases: - name: имя_бд schemas: - name: имя_схемы tables: - name: имя_таблицы indexes: - name: имя_индексаИспользование списков запретов
Чтобы не указывать слишком много объектов, как в предыдущих способах, используйте список запретов и исключите из сбора данных определённые объекты. За примерами реализации обратитесь к Подразделу 6.6.5.
Увеличение ресурсов
Если требуются все собираемые метрики, выделите pgpro-otel-collector больше ресурсов процессора. Например, если из-за недостатка ресурсов сервера станица
/metricsзагружается слишком медленно.