9.3. Проблемы с экспортёром prometheus #

Экспортёр prometheus не предназначен для обработки и передачи больших объёмов метрик.

Рассмотрим сценарий, в котором в базе данных Postgres Pro содержится 10 000 таблиц и 10 000 индексов. Используем следующий расширенный набор плагинов:

  • hostmetrics: cpu (utilization), disk, filesystem, load, memory, network, paging, processes

  • postgrespro: 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 записей с метриками.

Используйте таблицу ниже, чтобы оценить количество метрик.

Имя плагинаКоличество метрик на объект
tables31 на таблицу
indexes6 на индекс (+1, если у индекса недопустимое значение)
bloat_tables1 на таблицу
bloat_indexes1 на индекс

Поэтому для 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 загружается слишком медленно.