Интеграция OTLP
Перевод в процессе / Translation in progress. See русская версия.
Flaree принимает сигналы OpenTelemetry в двух режимах: через loopback-приёмник агента и напрямую в публичный ingestion-шлюз без агента. Концептуальные детали обоих режимов — в концепции OTLP.
| Режим | Endpoint | Когда выбирать |
|---|---|---|
| Через агент (loopback) | http://127.0.0.1:4318 | Агент уже стоит на хосте, нужны маскирование секретов и spool при сетевых сбоях, есть приватные сигналы (db.statement, заголовки авторизации). |
| Прямой ingestion (agentless) | https://api.flaree.ru/otlp/v1 | Serverless / managed-runtime без агента (Lambda, Cloud Functions), быстрая интеграция в существующий OpenTelemetry-стек, не нужны локальный буфер и redact на агенте. |
Дальше — единая структура для обоих режимов: prerequisites, минимальная и полная конфигурация, проверка, troubleshooting.
Предварительные требования
- OpenTelemetry SDK в приложении, поддерживающий OTLP/HTTP с JSON-кодированием (Protobuf не поддерживается ни в одном из режимов).
- Токен workspace из дашборда —
${FLAREE_TOKEN}для agentless и вagent.yamlдля loopback-режима. - Для режима «через агент»: агент Flaree ≥ 1.0 на том же хосте, что и
приложение; сетевая доступность loopback
127.0.0.1:4318из приложения (для контейнера —network_mode: hostили общий pod). - Для режима «прямой ingestion»: исходящий HTTPS до
api.flaree.ru:443из приложения и любая среда, способная отправить HTTP-запрос сContent-Type: application/jsonи заголовком авторизации.
Минимальная конфигурация
Через агент (loopback)
agent.yaml:
otlp:
enabled: true
host: 127.0.0.1
port: 4318
Приложение отправляет сигналы на
http://127.0.0.1:4318/v1/logs, /v1/metrics, /v1/traces. Приёмник
отказывается стартовать с host: 0.0.0.0 — это защищает поверхность агента
от публичного доступа.
Конфиг OTEL SDK в приложении (через переменные окружения):
OTEL_EXPORTER_OTLP_PROTOCOL=http/json
OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318
Прямой ingestion (agentless)
Агент не нужен. OTEL SDK в приложении бьёт прямо в публичный шлюз с токеном workspace в заголовке:
OTEL_EXPORTER_OTLP_PROTOCOL=http/json
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.flaree.ru/otlp
OTEL_EXPORTER_OTLP_HEADERS=x-flaree-token=${FLAREE_TOKEN}
SDK сам подставит /v1/logs, /v1/metrics, /v1/traces к корню endpoint.
Полная конфигурация
Через агент (loopback)
otlp:
enabled: true
host: 127.0.0.1
port: 4318
signals:
logs: true
metrics: true
traces: true
max_payload_bytes: 4194304
redact_fields:
- http.request.header.authorization
- db.statement
- user.email
headers_required:
x-agent-token: ${FLAREE_TOKEN}
Поля:
signals— включает конкретные типы сигналов (по умолчанию все три).max_payload_bytes— верхняя граница тела запроса; превышение возвращает413 payload_too_largeбез потери ранее принятых батчей.redact_fields— маскировка секрет-атрибутов на агенте до отправки на backend; в agentless-режиме недоступна — приложение должно делать redact самостоятельно.headers_required— опциональный pre-shared-ключ между приложением и агентом; секрет берётся из${FLAREE_*}-переменной.
Прямой ingestion (agentless)
OpenTelemetry Collector — наиболее удобный путь, если сигналы от нескольких источников нужно собрать в один поток до отправки во Flaree:
# otel-collector.yaml
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 5s
send_batch_size: 1000
attributes/redact:
actions:
- key: http.request.header.authorization
action: delete
- key: db.statement
action: delete
exporters:
otlphttp/flaree:
endpoint: https://api.flaree.ru/otlp
encoding: json
headers:
x-flaree-token: ${FLAREE_TOKEN}
compression: gzip
retry_on_failure:
enabled: true
initial_interval: 5s
max_interval: 30s
service:
pipelines:
logs:
receivers: [otlp]
processors: [batch, attributes/redact]
exporters: [otlphttp/flaree]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp/flaree]
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp/flaree]
В agentless-режиме backend возвращает HTTP 429 при превышении квоты — клиент
должен уважать заголовок Retry-After и поле reset_at в теле ответа
(детали — в Reference: API).
Проверка работы
- Отправьте пустой batch логов на свой endpoint и убедитесь, что приёмник отвечает HTTP 200 (или 204).
- Убедитесь, что счётчик
flaree_agent_otlp_accepted_total(loopback-режим) или метрика клиента OTEL Collectorotelcol_exporter_sent_log_records(agentless-режим) растёт после каждого батча. - Проверьте, что сигналы доходят до облака: в дашборде
app.flaree.ruу соответствующего компонента появляются свежие логи или метрики в течение ≤ 1 минуты.
# Через агент (loopback)
curl -sS http://127.0.0.1:4318/v1/logs \
-H 'Content-Type: application/json' \
-d '{}' -o /dev/null -w '%{http_code}\n'
curl -sS http://127.0.0.1:9100/metrics | grep flaree_agent_otlp_accepted_total
# Прямой ingestion (agentless)
curl -sS https://api.flaree.ru/otlp/v1/logs \
-H 'Content-Type: application/json' \
-H "x-flaree-token: ${FLAREE_TOKEN}" \
-d '{}' -o /dev/null -w '%{http_code}\n'
Troubleshooting
- Приёмник не отвечает или сигналы не появляются в дашборде — см. OTLP не принимает данные.
- При HTTP 429 в agentless-режиме — см. 429 quota_exceeded.
В loopback-режиме на VM проверьте, что firewall не режет loopback-трафик и
что 127.0.0.1:4318 не занят посторонним сервисом
(ss -lnt 'sport = :4318'). В agentless — что у среды есть исходящий
HTTPS до api.flaree.ru:443.