Настройка работы с журналами

Для настройки работы с журналами нужно:

  • добавить и настроить ресивер filelog;
  • добавить и настроить процессоры attributes и resource;
  • добавить и настроить экспортер otlphttp;
  • объединить ресивер, процессоры и экспортер в конвейер.

Добавление и настройка ресивера filelog

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

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

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

Независимо от формата журнала необходимо указать путь к каталогу журналов и шаблон имен журналов.

Пример настройки ресивера для сбора журналов в формате JSON:

receivers:
  filelog:
    include: [ /var/log/postgresql/*.json ]
    start_at: end
    retry_on_failure:
      enabled: true
      initial_interval: 1s
      max_interval: 30s
      max_elapsed_time: 5m
    operators:
      - type: json_parser
        parse_ints: true
        timestamp:
          parse_from: attributes.timestamp
          layout_type: strptime
          layout: '%Y-%m-%d %H:%M:%S.%L %Z'
      - type: remove
        field: attributes.timestamp

Пример настройки ресивера для сбора журналов в формате CSV:

receivers:
  filelog:
    include: [ /var/log/postgresql/*.csv ]
    start_at: end
    retry_on_failure:
      enabled: true
      initial_interval: 1s
      max_interval: 30s
      max_elapsed_time: 5m
    multiline:
      line_start_pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}
    operators:
      - type: csv_parser
        header: timestamp,user,dbname,pid,connection_from,session_id,line_num,ps,session_start,vxid,txid,error_severity,state_code,message,detail,hint,internal_query,internal_position,context,statement,cursor_position,func_name,application_name,backend_type,leader_pid,query_id
        timestamp:
          parse_from: attributes.timestamp
          layout_type: strptime
          layout: '%Y-%m-%d %H:%M:%S.%L %Z'
      - type: remove
        field: attributes.timestamp

Обратите внимание, что настройка под CSV требует указания большего числа параметров, т.к. должна быть адаптирована под особенности CSV журналирования.

Подробное описание настроек и примеры конфигурации также можно найти в примерах в /usr/share/doc/pgpro-otel-collector/examples.

Добавление и настройка процессоров attributes и resource

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

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

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

Настройка процессора resource осуществляется в случае отправки журналов в Elastic. Независимо от формата журнала необходимо указать добавление атрибутов service.name и service.instance.id.

Пример настройки процессоров для сбора журналов в формате JSON:

processors:
  attributes/convert:
    actions:
      - key: query_id
        action: convert
        converted_type: string
  resource:
    attributes:
      - key: service.name
        action: upsert
        value: postgresql
      - key: service.instance.id
        action: upsert
        value: 1.2.3.4:5432

Пример настройки процессоров для сбора журналов в формате CSV:

processors:
  attributes/convert:
    actions:
      - key: pid
        action: convert
        converted_type: int
      - key: line_num
        action: convert
        converted_type: int
      - key: txid
        action: convert
        converted_type: int
      - key: remote_port
        action: convert
        converted_type: int
      - key: cursor_position
        action: convert
        converted_type: int
      - key: internal_position
        action: convert
        converted_type: int
      - key: leader_pid
        action: convert
        converted_type: int
  resource:
    attributes:
      - key: service.name
        action: upsert
        value: postgresql
      - key: service.instance.id
        action: upsert
        value: 1.2.3.4:5432

Добавление и настройка экспортера otlphttp

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

Для настройки достаточно указать адрес целевой системы куда следует отправить данные:

exporters:
  otlphttp:
    endpoint: https://otlp.example.org

Настройка конвейера

После того как ресиверы, процессоры и экспортеры добавлены и настроены, нужно объединить в конвейер. Настройка конвейера осуществляется в секции service. Состав конвейера всегда напрямую зависит от предварительно добавленных компонентов (не существует универсальной конфигурации по умолчанию).

В примере ниже выполнена настройка конвейера для работы с журналами. Сбор данных осуществляется ресивером filelog, затем данные проходят обработку через процессоры resource и attributes, затем уходят на отправку в экспортеры otlphttp.

Таким образом все компоненты используемые в конвейере, также должны быть добавлены в конфигурацию и настроены.

service:
  extensions: []
  pipelines:
    logs:
      receivers:
        - filelog
      processors:
        - resource
        - attributes/convert
      exporters:
        - otlphttp