Получение логов от внешних источников

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

На этой странице:

Способы получения логов

Компонент proto-log-storage — компонент Proto Observability Platform, отвечающий за приём, хранение и поиск лог-записей. Лог-записи попадают в proto-log-storage одним из двух способов.

Через ProtoOBP Агент

Самый простой путь: на хосте-источнике достаточно установить и настроить ProtoOBP Агент. Агент передаёт логи через ProtoOBP Backend, который внутренне маршрутизирует записи в proto-log-storage — никаких дополнительных компонентов и прямого сетевого доступа от хоста-источника к proto-log-storage не требуется. В конфигурации агента указывается только адрес ProtoOBP Backend.

Отправка напрямую в proto-log-storage

Если в инфраструктуре уже используется сторонний лог-шипер или коллектор (OpenTelemetry Collector, DataDog Agent, Filebeat, Fluentbit, Vector и др.), его можно направить напрямую в proto-log-storage по одному из перечисленных ниже HTTP API. В этом случае в конфигурации шипера/коллектора нужно явно указать адрес и порт proto-log-storage:

  • При установке ProtoOBP с одним сервером proto-log-storage работает на том же хосте, что и остальные компоненты ProtoOBP Backend, — используется этот общий адрес.
  • При установке с несколькими серверами (для больших инсталляций) proto-log-storage обычно вынесен на отдельный хост — используется его сетевой адрес.

Точные значения адреса и порта proto-log-storage в вашей инсталляции уточняйте у администратора платформы. В примерах ниже используется плейсхолдер <proto-log-storage-host>:9428, где 9428 — порт HTTP API proto-log-storage по умолчанию.

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

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

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


ProtoOBP Агент

ProtoOBP Агент — встроенный агент платформы Proto Observability Platform для сбора метрик, трейсов и логов.

Требования

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

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

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

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

logs_enabled: true
logs_config:
  logs_pobp_url: <protoobp-address>:443
  logs_no_ssl: false
  container_collect_all: true
ПараметрОписаниеПример
logs_enabledВключение сбора логовtrue
logs_config.logs_pobp_urlАдрес ProtoOBP Backend с указанием порта (без схемы)protoobp-address:443
logs_config.logs_no_sslЕсли используется порт ProtoOBP Backend 80 — true, если 443 — falsefalse
logs_config.container_collect_allВключение сбора логов всех контейнеров на хосте (опционально)true

<protoobp-address> — адрес ProtoOBP Backend: порт 80 для HTTP, 443 для HTTPS. Все API-пути маршрутизируются на нужные компоненты внутри Backend — отдельно настраивать обратный прокси не требуется.

Шаг 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

Пример: сбор логов systemd-сервиса через syslog (conf.d/myservice.d/conf.yaml):

На большинстве дистрибутивов с rsyslog (Ubuntu/Debian) systemd-сервисы автоматически дублируют записи journald в /var/log/syslog. Это позволяет собирать логи нужного юнита через файловый источник с фильтрацией по имени программы:

logs:
  - type: file
    path: /var/log/syslog
    service: my-service
    source: my-service
    log_processing_rules:
      - type: include_at_match
        name: include_my_service
        pattern: " my-service\\["

Шаблон " my-service\\[" соответствует префиксу syslog-строки вида <host> my-service[<pid>]:, отсекая записи других сервисов. Чтобы пользователь агента (pobp-agent) мог читать /var/log/syslog, добавьте его в группу adm:

sudo usermod -aG adm pobp-agent
sudo systemctl restart protoobp-agent

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

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

ПеременнаяОписаниеПример
POBP_LOGS_ENABLEDВключение сбора логовtrue
POBP_LOGS_CONFIG_LOGS_POBP_URLАдрес ProtoOBP Backend с указанием порта (без схемы)protoobp-address:443
POBP_LOGS_CONFIG_LOGS_NO_SSLЕсли используется порт ProtoOBP Backend 80 - true, если 443 - falsefalse
POBP_LOGS_CONFIG_CONTAINER_COLLECT_ALLВключение сбора логов всех контейнеров на хосте (опционально)true
POBP_HOSTNAMEИмя хоста для тегирования, если автоматическое определение хоста работает некорректноweb-server-01
POBP_TAGSГлобальные тегиenv:prod,team:infra

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

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

sudo systemctl restart protoobp-agent

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

Проверьте, что агент успешно стартовал и пайплайн логов запущен:

sudo protoobp-agent status

В выводе должен быть раздел Logs Agent со статусом running и хотя бы один источник с ненулевым BytesRead.

Поступление лог-записей проверяется через веб-интерфейс ProtoOBP — раздел Logs Explorer. Подробнее: Руководство по Logs Explorer.


OpenTelemetry Collector

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

Логи OpenTelemetry можно направить в платформу двумя путями:

  • Напрямую в proto-log-storage — экспортёр вашего коллектора отправляет логи прямо в хранилище по OTLP/HTTP (описано ниже). Меньше промежуточных звеньев, нативный приём VictoriaLogs, тонкая настройка полей через VL-*-заголовки.
  • Через шлюз proto-otel-collector — общий приёмник телеметрии ProtoOBP (трейсы, метрики, логи) с приёмом по gRPC и HTTP. Подходит, когда нужна единая точка входа для всех сигналов или приём по gRPC. Настройка — на странице OpenTelemetry в Proto Observability Platform.

Вариант 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>:9428 на адрес и порт 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 поступление логов проверяется через веб-интерфейс ProtoOBP — раздел Logs Explorer. Подробнее: Руководство по Logs Explorer.


DataDog Agent

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

Требования

  • DataDog Agent версии 6.x или новее
  • Сетевой доступ к ProtoOBP Backend (порт по умолчанию: 80 или 443)

Настройка

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

В конфигурационном файле DataDog Agent (datadog.yaml) укажите адрес ProtoOBP Backend в качестве получателя логов:

logs_enabled: true
logs_config:
  logs_dd_url: <protoobp-address>:443
  use_http: true

<protoobp-address> — адрес ProtoOBP Backend: порт 80 для HTTP, 443 для HTTPS. Все API-пути маршрутизируются на нужные компоненты внутри Backend.

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

Создайте конфигурационные файлы источников логов в директории 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

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

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

ПеременнаяОписаниеПример
DD_LOGS_ENABLEDВключение сбора логовtrue
DD_LOGS_CONFIG_LOGS_DD_URLАдрес ProtoOBP Backendprotoobp-address:443
DD_LOGS_CONFIG_USE_HTTPИспользовать HTTPtrue
DD_API_KEYAPI-ключ (произвольное значение)placeholder

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

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

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

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

Проверьте, что агент успешно стартовал и пайплайн логов запущен:

sudo datadog-agent status

В выводе должен быть раздел Logs Agent со статусом running и хотя бы один источник с ненулевым BytesRead.

Поступление лог-записей проверяется через веб-интерфейс ProtoOBP — раздел Logs Explorer. Подробнее: Руководство по Logs Explorer.


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

Следующие коллекторы и агенты также совместимы с 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-Fieldsignore_fields
VL-Extra-Fieldsextra_fields
VL-Debugdebug=1

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


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

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

Откройте веб-интерфейс ProtoOBP, раздел Logs Explorer, и выполните запрос * — должны отобразиться последние принятые лог-записи. Подробнее: Руководство по Logs Explorer.

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

Для проверки формата данных без их сохранения используйте параметр 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Количество созданных лог-потоков. Быстрый рост может указывать на проблему с высокой кардинальностью