Получение данных логов
Обзор
Компонент 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]
Совет
Используйте процессорbatch для группировки лог-записей перед отправкой — это снижает нагрузку на сеть и proto-log-storage.
Проверка работы
После запуска 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 |
Примечание
Поскольку логи отправляются в 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
# Проверка поступления логов в 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 |
Количество созданных лог-потоков. Быстрый рост может указывать на проблему с высокой кардинальностью |
Важно
Выбирайте для_stream_fields поля с низкой кардинальностью (service.name, host.name, deployment.environment). Использование полей с высокой кардинальностью (например, уникальных идентификаторов запросов) приведёт к значительному росту количества лог-потоков и снижению производительности.