配置后OpenTelemetry Java Agent停止向Jaeger发送Span求助
问题排查与解决方案
1. 检查@WithSpan注解的正确性
- 确认使用的是
io.opentelemetry.instrumentation.annotations.WithSpan包下的注解,避免引入其他同名注解导致识别失败 - 被注解方法需为非静态方法,且调用时要基于被代理的实例(如Spring/CDI Bean),或确保OpenTelemetry上下文已正确传播到方法执行环境
- 验证方法确实被执行,没有因业务分支逻辑被跳过
2. 补充关键VM配置参数
当前配置缺少服务标识和上下文传播的必要参数,添加以下内容:
-Dotel.service.name=your-service-id -Dotel.resource.attributes=service.name=your-service-id -Dotel.instrumentation.context-propagation.enabled=true
3. 验证Jaeger接收端状态
- 确认Jaeger Collector(14250端口)在本地正常运行,可通过
telnet localhost 14250或curl http://localhost:14250测试连通性 - 查看Jaeger服务日志,排查是否存在接收失败、拒绝连接等异常
4. 开启Agent调试日志定位问题
添加日志参数,查看Agent初始化和Span处理的细节:
-Dotel.javaagent.debug=true -Dorg.slf4j.simpleLogger.defaultLogLevel=debug
重点关注:
opentelemetry-instrumentation-annotations插件是否成功加载- Span创建、导出环节是否有报错或未执行的日志记录
5. 手动初始化OpenTelemetry(备选方案)
若Agent自动配置异常,可在代码中手动初始化确保注解生效:
import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.annotations.support.AnnotationSupport; import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; import io.opentelemetry.exporter.jaeger.JaegerSpanExporter; public class OtelConfig { public static OpenTelemetry initOtel() { JaegerSpanExporter exporter = JaegerSpanExporter.builder() .setEndpoint("http://localhost:14250") .build(); SdkTracerProvider tracerProvider = SdkTracerProvider.builder() .addSpanProcessor(SimpleSpanProcessor.create(exporter)) .build(); OpenTelemetrySdk otel = OpenTelemetrySdk.builder() .setTracerProvider(tracerProvider) .buildAndRegisterGlobal(); AnnotationSupport.enable(otel); return otel; } }
在应用启动时调用OtelConfig.initOtel()完成初始化
内容的提问来源于stack exchange,提问作者J.chawol
相关产品推荐
相关产品推荐

