Получение логов от внешних источников
На этой странице:
- Способы получения логов
- ProtoOBP Агент
- OpenTelemetry Collector
- DataDog Agent
- Другие способы получения данных
- Общие параметры HTTP API
- Устранение неполадок
Способы получения логов
Компонент 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 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 |
Ниже приведены инструкции по настройке наиболее распространённых агентов и коллекторов.
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 — false | false |
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 - false | false |
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.
Что выбрать
Для логов отправка напрямую вproto-log-storage эффективнее — меньше хопов и накладных расходов. Шлюз proto-otel-collector выбирайте, когда нужна единая точка входа для трейсов, метрик и логов, приём по gRPC или централизованная обработка на стороне платформы. Не выстраивайте цепочку «ваш коллектор → proto-otel-collector → proto-log-storage» только ради логов: это лишний хоп — ваш коллектор может отправлять логи прямо в proto-log-storage.Вариант 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]
Совет
Используйте процессорbatch для группировки лог-записей перед отправкой — это снижает нагрузку на сеть и proto-log-storage.Проверка работы
После запуска 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 Backend | protoobp-address:443 |
DD_LOGS_CONFIG_USE_HTTP | Использовать HTTP | true |
DD_API_KEY | API-ключ (произвольное значение) | placeholder |
Примечание
Поскольку логи отправляются в proto-log-storage, а не в DataDog SaaS, значениеDD_API_KEY может быть произвольным, однако оно обязательно должно быть задано — агент не запустится без него.Управление полями
При приёме логов от 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-Fields | ignore_fields |
VL-Extra-Fields | extra_fields |
VL-Debug | debug=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 | Количество созданных лог-потоков. Быстрый рост может указывать на проблему с высокой кардинальностью |
Важно
Выбирайте для_stream_fields поля с низкой кардинальностью (service.name, host.name, deployment.environment). Использование полей с высокой кардинальностью (например, уникальных идентификаторов запросов) приведёт к значительному росту количества лог-потоков и снижению производительности.