使用 OTLP 将 java opentelemetry 代理连接到 jaeger 会出现“意外的流结束”

问题描述 投票:0回答:1

有很多关于配置 opentelemetry java 自动代理以使用 opentelemetry-javaagent-all.jar 中包含的 Jaeger 导出器的指南

但是 jaeger exporter 已被弃用并删除,所以现在唯一的方法是使用 OTLP。 问题是如何?

使用以下命令启动 jaeger 安装示例:

docker run --name jaeger \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  jaegertracing/all-in-on

有些帖子认为 4317 是 OTLP 端口,所以我同意这个。

java spring boot应用程序是这样启动的:

java  -javaagent:myproj\src\main\resources\opentelemetry-javaagent.jar -Dotel.javaagent.configuration-file=myproj\src\main\resources\otel-jaeger-config.properties -jar my.jar

属性(java代理不支持yml)如下所示:

otel.service.name=myservice
otel.exporter.otlp.endpoint=http://localhost:4317
otel.logs.exporter=none

otel.logs.exporter=none 需要阻止 java 代理尝试向 Jaeger 发送日志文件(Jaeger 无法处理它们)。

当 java 应用程序启动时,您会收到此错误:

ERROR io.opentelemetry.exporter.internal.http.HttpExporter - Failed to export spans. The request could not be executed. Full error message: unexpected end of stream on http://localhost:4317/...
java.io.IOException: unexpected end of stream on http://localhost:4317/...

在 Jaeger docker 中,您会看到以下输出:

{"level":"info","ts":1727365210.185326,"caller":"transport/http2_server.go:298","msg":"[transport] [server-transport 0xc0004d4d00] Closing: connection error: desc = \"transport: http2Server.HandleStreams received bogus greeting from client: \\\"POST /v1/metrics HTTP/1.\\\"\""}
{"level":"info","ts":1727365210.1853955,"caller":"[email protected]/server.go:994","msg":"[core] [Server #4]grpc: Server.Serve failed to create ServerTransport: connection error: desc = \"transport: http2Server.HandleStreams received bogus greeting from client: \\\"POST /v1/metrics HTTP/1.\\\"\""}

我还尝试了以下为新遗物找到的配置:

otel.exporter.otlp.protocol=http/protobuf
otel.attribute.value.length.limit=4095
otel.experimental.resource.disabled-keys=process.command_args
otel.exporter.otlp.compression=gzip
otel.exporter.otlp.metrics.temporality.preference=delta

但是错误并没有改变。

java open-telemetry jaeger otlp-grpc
1个回答
0
投票

根据日志,导出器正在执行 HTTP POST,因此您需要将其指向端口 4318 (http),而不是 4317 (grpc)。

© www.soinside.com 2019 - 2024. All rights reserved.