OTLP receiver не принимает данные
info
Перевод в процессе / Translation in progress. See русская версия.
Приложение шлёт OTLP-трафик в loopback 127.0.0.1:4318, но receiver агента их не видит. Симптомы обычно появляются сразу после запуска приложения или после изменения конфигурации OTEL SDK.
Симптом
- Приложение логирует
connection refusedна127.0.0.1:4318. - Счётчик
flaree_agent_otlp_accepted_totalне растёт (остаётся на старом значении после нескольких повторов). - OTEL exporter получает HTTP
415с теломunsupported content-type— receiver отказывается декодировать Protobuf.
Диагностика
Убедитесь, что порт 4318 действительно слушается агентом и отвечает на loopback:
ss -tnlp | grep 4318
curl -sS http://127.0.0.1:4318/v1/logs -H 'Content-Type: application/json' -d '{}' -o /dev/null -w '%{http_code}\n'
journalctl -u flaree-agent | grep -i otlp | tail -n 20
docker exec flaree-agent cat /proc/self/net/tcp | grep -i 10E6
Что искать в выводе:
ssпоказывает listener только если агент стартовал OTLP-receiver; пустой вывод — receiver выключен (otlp.enabled: false).curlна/v1/logsсContent-Type: application/jsonдолжен возвращать200или400(структурная ошибка). Код415означает, что приложение шлёт Protobuf — receiver принимает только JSON, чтобы сохранить NativeAOT-совместимость.- Если агент стартует с
host: 0.0.0.0, он откажется биндить порт и залогирует fatal: receiver разрешён только на loopback (127.0.0.1или::1).
Исправление
- Включите receiver:
FLAREE_AGENT_OTLP_ENABLED=trueилиotlp.enabled: trueвagent.yaml. - Проверьте, что
otlp.host: 127.0.0.1иotlp.port: 4318(значения по умолчанию).0.0.0.0не поддерживается. - Переключите OTEL exporter в приложении на JSON-кодирование — это обязательное требование агента.
- Убедитесь, что приложение шлёт заголовок
Content-Type: application/json.
Для большинства SDK достаточно переменных окружения:
OTEL_EXPORTER_OTLP_PROTOCOL=http/json \
OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318 \
systemctl restart myapp
После рестарта приложения счётчик flaree_agent_otlp_accepted_total должен начать расти в пределах нескольких секунд.