6.3. Работа с журналами #

В этом разделе описаны шаги, необходимые для работы с журналами.

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

Ресивер filelog является открытым компонентом OpenTelemetry и используется для сбора журналов экземпляра СУБД. Подробную информацию о нём можно получить здесь.

Ресивер 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: csv_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.

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

Процессоры attributes и resource являются открытыми компонентами OpenTelemetry.

Конфигурация процессоров также зависит от настройки экземпляра СУБД и используемого формата журнала (см. параметры 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

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

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

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

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

6.3.4. Настройка конвейера #

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

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

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

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