OTLP receiver не принимает данные
Приложение шлёт OTLP-трафик на 127.0.0.1:4318, но данные не доходят до Flaree. Обычно проблема проявляется сразу после запуска приложения или после изменения конфигурации OTel SDK.
Симптом
- Приложение логирует
connection refusedна127.0.0.1:4318. - Экспортёр получает ошибки на
POST /v1/logsили/v1/metrics. - Данные приняты receiver'ом, но не видны в дашборде.
- Traces отправляются, но не появляются — это ожидаемо: receiver принимает
/v1/tracesи отбрасывает их, трейсинг не реализован.
Диагностика
Убедитесь, что порт 4318 слушается агентом и отвечает на loopback:
ss -tnlp | grep 4318
curl -sS -o /dev/null -w '%{http_code}\n' \
-H 'Content-Type: application/json' -d '{}' \
http://127.0.0.1:4318/v1/logs
journalctl -u flaree-agent | grep -i otlp | tail -n 20
Интерпретация вывода:
ssпуст — receiver выключен: по умолчаниюotlp.enabled: false, его нужно включить явно.curlвозвращает200/400— receiver работает;400на пустом теле — нормальная структурная ошибка.curlвозвращает413— тело больше лимитаotlp.max_request_bytes(по умолчанию 4 МБ); уменьшите размер батча в SDK.- Агент не стартует, exit 78, в stderr
otlp.host must be a loopback address— в конфиге указан non-loopback адрес (0.0.0.0запрещён валидацией). - Receiver принимает только OTLP/JSON: если SDK шлёт Protobuf, переключите его на
http/json.
Исправление
- Включите receiver:
otlp.enabled: trueвagent.yamlилиFLAREE_AGENT_OTLP_ENABLED=true, затем перезапустите агент. - Оставьте
otlp.host: 127.0.0.1— любой другой адрес не пройдёт валидацию при старте. - Переключите экспортёр приложения на JSON-кодирование и loopback-endpoint:
OTEL_EXPORTER_OTLP_PROTOCOL=http/json \
OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318 \
systemctl restart myapp
- Проверьте результат повторным
curl— код200на/v1/logsподтверждает приём; данные появятся в дашборде после пересылки через/api/agent/logs.