Получение данных логов

Способы отправки лог-записей в Proto Observability Platform: OpenTelemetry Collector, ProtoOBP Агент, DataDog Agent и другие.

Обзор

Компонент proto-log-storage принимает лог-записи по нескольким HTTP API, что позволяет интегрировать различные коллекторы и агенты:

Протокол Эндпоинт
Elasticsearch Bulk API POST /insert/elasticsearch/_bulk
JSON stream (ndjson) POST /insert/jsonline
Loki JSON API POST /insert/loki/api/v1/push
OpenTelemetry (OTLP/HTTP) POST /insert/opentelemetry/v1/logs
DataDog API POST /insert/datadog/api/v2/logs

Ниже приведены инструкции по настройке наиболее распространённых агентов и коллекторов.


OpenTelemetry Collector

OpenTelemetry Collector (https://opentelemetry.io/docs/collector/) — универсальный агент для сбора, обработки и экспорта телеметрических данных. Proto Observability Platform поддерживает приём логов от Collector по протоколу OTLP/HTTP, а также через Elasticsearch-совместимый экспортёр.

Вариант 1: OTLP/HTTP экспортёр (рекомендуется)

Используйте экспортёр otlphttp для отправки логов напрямую в proto-log-storage по протоколу OpenTelemetry.

Минимальная конфигурация Collector (otel-collector-config.yaml):

receivers:
  filelog:
    include:
      - /var/log/app/*.log
    resource:
      service.name: my-service
      deployment.environment: production

exporters:
  otlphttp:
    logs_endpoint: http://<proto-log-storage-host>:9428/insert/opentelemetry/v1/logs

service:
  pipelines:
    logs:
      receivers: [filelog]
      exporters: [otlphttp]

Замените <proto-log-storage-host> на адрес вашего экземпляра proto-log-storage.

Дополнительные параметры через HTTP-заголовки:

Все параметры управления полями можно передавать через HTTP-заголовки в блоке headers экспортёра:

exporters:
  otlphttp:
    logs_endpoint: http://<proto-log-storage-host>:9428/insert/opentelemetry/v1/logs
    headers:
      VL-Stream-Fields: host.name,service.name,deployment.environment
      VL-Ignore-Fields: internal_id,debug_token
Заголовок Описание
VL-Msg-Field Имя поля с текстом лог-сообщения (по умолчанию _msg)
VL-Time-Field Имя поля с временной меткой (по умолчанию _time)
VL-Stream-Fields Поля, определяющие лог-поток (через запятую). По умолчанию все ресурсные лейблы
VL-Ignore-Fields Поля, которые следует исключить (через запятую). Поддерживает подстановку prefix*
VL-Extra-Fields Дополнительные поля в формате field=value (через запятую)

Вариант 2: Elasticsearch экспортёр

Если в вашей инфраструктуре уже настроен Elasticsearch-совместимый экспортёр, его можно направить на proto-log-storage:

receivers:
  filelog:
    include:
      - /var/log/app/*.log
    resource:
      region: ru-central1

exporters:
  elasticsearch:
    endpoints:
      - http://<proto-log-storage-host>:9428/insert/elasticsearch
    headers:
      VL-Msg-Field: Body

service:
  pipelines:
    logs:
      receivers: [filelog]
      exporters: [elasticsearch]

Поддерживаемые ресиверы

OpenTelemetry Collector поддерживает множество ресиверов для сбора логов из различных источников:

  • filelog — чтение лог-файлов с диска
  • journald — сбор логов systemd journal
  • syslog — приём syslog-сообщений (RFC 3164 / RFC 5424)
  • tcplog / udplog — приём логов по TCP/UDP
  • windowseventlog — сбор событий Windows Event Log
  • otlp — приём логов от других OpenTelemetry-компонентов

Полный список ресиверов доступен в реестре OpenTelemetry Collector (https://opentelemetry.io/docs/collector/components/).

Пример: сбор логов из нескольких источников

receivers:
  filelog:
    include:
      - /var/log/nginx/access.log
      - /var/log/nginx/error.log
    resource:
      service.name: nginx

  journald:
    units:
      - my-app.service
      - another-service.service
    resource:
      service.name: systemd

exporters:
  otlphttp:
    logs_endpoint: http://<proto-log-storage-host>:9428/insert/opentelemetry/v1/logs
    headers:
      VL-Stream-Fields: service.name

processors:
  batch:
    send_batch_size: 1000
    timeout: 5s

service:
  pipelines:
    logs:
      receivers: [filelog, journald]
      processors: [batch]
      exporters: [otlphttp]

Проверка работы

После запуска Collector проверьте, что логи поступают, выполнив запрос к proto-log-storage:

curl http://<proto-log-storage-host>:9428/select/logsql/query -d 'query=*' | head

ProtoOBP Агент

ProtoOBP Агент — встроенный агент платформы Proto Observability Platform для сбора логов. Агент отправляет лог-записи через HTTP API, совместимое с DataDog Agent API, что обеспечивает надёжную передачу данных в proto-log-storage.

Требования

  • Установленный ProtoOBP Агент (версия 7.x или новее)
  • Сетевой доступ к proto-log-storage (порт по умолчанию: 9428)

Настройка сбора логов

Шаг 1: Включение сбора логов

В конфигурационном файле агента (pobp.yaml) включите сбор логов:

logs_enabled: true
logs_config:
  logs_pobp_url: <proto-log-storage-proxy-host>:<port>
  use_http: true

Замените <proto-log-storage-proxy-host>:<port> на адрес обратного прокси, за которым расположен proto-log-storage (см. раздел «Настройка обратного прокси» ниже).

Шаг 2: Настройка источников логов

Создайте конфигурационный файл для каждого источника логов в директории conf.d/:

Пример: сбор логов из файла (conf.d/myapp.d/conf.yaml):

logs:
  - type: file
    path: /var/log/myapp/*.log
    service: my-application
    source: myapp
    tags:
      - env:production
      - team:backend

Пример: сбор логов Docker-контейнера (conf.d/docker.d/conf.yaml):

logs:
  - type: docker
    service: my-container
    source: docker

Пример: сбор логов journald (conf.d/journald.d/conf.yaml):

logs:
  - type: journald
    include_units:
      - my-service.service
    source: journald

Шаг 3: Настройка через переменные окружения

Альтернативно, агент можно сконфигурировать полностью через переменные окружения:

Переменная Описание Пример
POBP_LOGS_ENABLED Включение сбора логов true
POBP_LOGS_CONFIG_LOGS_POBP_URL Адрес proto-log-storage proxy-host:8427
POBP_LOGS_CONFIG_USE_HTTP Использовать HTTP true
POBP_HOSTNAME Имя хоста для тегирования web-server-01
POBP_TAGS Глобальные теги env:prod,team:infra

Настройка обратного прокси

ProtoOBP Агент отправляет логи по фиксированным API-путям (например, /api/v2/logs), которые необходимо перенаправить на соответствующие эндпоинты proto-log-storage. Для этого используется обратный прокси.

Конфигурация обратного прокси:

unauthorized_user:
  url_map:
    - src_paths:
        - "/api/v2/logs"
        - "/api/v1/validate"
      url_prefix: http://<proto-log-storage-host>:9428/insert/datadog/

Замените <proto-log-storage-host> на адрес вашего экземпляра proto-log-storage.

Шаг 4: Перезапуск агента

После внесения изменений в конфигурацию перезапустите ProtoOBP Агент:

sudo systemctl restart protoobp-agent

Проверка работы

Убедитесь, что агент отправляет логи:

# Проверка статуса агента
sudo protoobp-agent status

# Проверка поступления логов в proto-log-storage
curl http://<proto-log-storage-host>:9428/select/logsql/query -d 'query=*' | head

DataDog Agent

Proto Observability Platform совместима с DataDog Agent для сбора логов. Если в вашей инфраструктуре уже используется DataDog Agent, его можно перенаправить на proto-log-storage с минимальными изменениями конфигурации.

Требования

  • DataDog Agent версии 6.x или новее
  • Обратный прокси для перенаправления запросов (DataDog Agent не поддерживает настройку произвольных URL-путей)

Настройка

Шаг 1: Настройка обратного прокси

DataDog Agent отправляет логи на фиксированные API-пути (/api/v2/logs), которые необходимо перенаправить на эндпоинты proto-log-storage.

Конфигурация обратного прокси:

unauthorized_user:
  url_map:
    - src_paths:
        - "/api/v2/logs"
        - "/api/v1/validate"
      url_prefix: http://<proto-log-storage-host>:9428/insert/datadog/
    - src_paths:
        - "/api/v1/series"
        - "/api/v2/series"
        - "/api/beta/sketches"
        - "/api/v1/check_run"
        - "/intake"
        - "/api/v1/metadata"
      url_prefix: http://<proto-metric-storage-host>:8428/datadog/

Замените <proto-log-storage-host> и <proto-metric-storage-host> на адреса ваших экземпляров.

Шаг 2: Настройка DataDog Agent

В конфигурационном файле DataDog Agent (datadog.yaml) перенаправьте отправку логов через обратный прокси:

logs_enabled: true
logs_config:
  logs_dd_url: <proxy-host>:<proxy-port>
  use_http: true

Шаг 3: Настройка источников логов

Создайте конфигурационные файлы источников логов в директории conf.d/:

Пример: сбор логов приложения (conf.d/myapp.d/conf.yaml):

logs:
  - type: file
    path: /var/log/myapp/*.log
    service: my-application
    source: myapp

Пример: сбор логов Docker-контейнера (conf.d/docker.d/conf.yaml):

logs:
  - type: docker
    service: my-container
    source: docker

Шаг 4: Настройка через переменные окружения

DataDog Agent также поддерживает настройку через переменные окружения:

Переменная Описание Пример
DD_LOGS_ENABLED Включение сбора логов true
DD_LOGS_CONFIG_LOGS_DD_URL Адрес обратного прокси proxy-host:8427
DD_LOGS_CONFIG_USE_HTTP Использовать HTTP true
DD_API_KEY API-ключ (произвольное значение) placeholder

Управление полями

При приёме логов от DataDog Agent можно управлять обработкой полей:

  • Исключение полей: передайте список полей для исключения через заголовок VL-Ignore-Fields или параметр запроса ignore_fields. Поддерживается подстановка prefix*.
  • Потоковые поля: передайте список полей для определения лог-потоков через заголовок VL-Stream-Fields или параметр запроса _stream_fields.

Проверка работы

# Проверка статуса агента
sudo datadog-agent status

# Проверка поступления логов в proto-log-storage
curl http://<proto-log-storage-host>:9428/select/logsql/query -d 'query=*' | head

Другие способы получения данных

Следующие коллекторы и агенты также совместимы с proto-log-storage. Документация по ним находится в разработке и предоставляется по запросу.

Коллектор / Агент Статус документации
Syslog, Rsyslog, Syslog-ng В разработке, предоставляется по запросу
Filebeat В разработке, предоставляется по запросу
Fluentbit В разработке, предоставляется по запросу
Fluentd В разработке, предоставляется по запросу
Logstash В разработке, предоставляется по запросу
Vector В разработке, предоставляется по запросу
Promtail (Grafana Loki, Grafana Agent, Grafana Alloy) В разработке, предоставляется по запросу
Telegraf В разработке, предоставляется по запросу
Journald В разработке, предоставляется по запросу

Для получения инструкций по настройке этих коллекторов обратитесь в службу технической поддержки.


Общие параметры HTTP API

Все HTTP API proto-log-storage поддерживают единый набор параметров, передаваемых как через строку запроса (query string), так и через HTTP-заголовки.

Параметры строки запроса

Параметр Описание
_msg_field Имя поля (или полей через запятую) с текстом сообщения. По умолчанию _msg
_time_field Имя поля (или полей через запятую) с временной меткой. По умолчанию _time
_stream_fields Поля, определяющие лог-поток (через запятую). По умолчанию все записи попадают в один поток {}
ignore_fields Поля для исключения (через запятую). Поддерживает prefix*
extra_fields Дополнительные поля в формате name=value (через запятую). Перезаписывают существующие
debug Установите 1 для логирования записей без сохранения (для отладки)

HTTP-заголовки

Заголовок Эквивалент параметра
VL-Msg-Field _msg_field
VL-Time-Field _time_field
VL-Stream-Fields _stream_fields
VL-Ignore-Fields ignore_fields
VL-Extra-Fields extra_fields
VL-Debug debug=1

Параметры строки запроса имеют приоритет над HTTP-заголовками.


Устранение неполадок

Проверка поступления логов

Выполните запрос ко всем записям:

curl http://<proto-log-storage-host>:9428/select/logsql/query -d 'query=*' | head

Режим отладки

Для проверки формата данных без их сохранения используйте параметр debug=1:

curl -X POST -H 'Content-Type: application/json' \
  'http://<proto-log-storage-host>:9428/insert/jsonline?debug=1' \
  --data-binary '{"_msg":"test message","_time":"0"}'

В этом режиме записи логируются, но не сохраняются в хранилище.

Полезные метрики

Метрика Описание
vl_rows_ingested_total Общее количество принятых лог-записей
vl_rows_dropped_total Количество записей, принятых в режиме отладки (не сохранены)
vl_streams_created_total Количество созданных лог-потоков. Быстрый рост может указывать на проблему с высокой кардинальностью