如何通过OpenTelemetry Spring Boot Starter零代码捕获方法级追踪?
问题描述
我正尝试使用零代码插桩的Spring Boot Starter将OpenTelemetry集成到现有Spring Boot应用中,已遵循官方文档在application.yml中完成如下配置:
otel: propagators: - tracecontext exporter: otlp: traces: endpoint: 'http://<otel_collector_server>:4319/v1/traces' protocol: http/protobuf metrics: exporter: none logs: exporter: none
当前配置下,应用可成功将追踪数据导出至OpenTelemetry Collector,并能在Grafana仪表盘中查看,但仅显示跨服务的端点调用高层信息,无法获取端点命中后调用的具体方法及方法执行时长。我希望捕获方法级追踪,以查看请求链路中调用的方法及其耗时。
已尝试操作
- 确认项目已添加
opentelemetry-spring-boot-starter依赖; - 验证追踪数据已成功导出至Collector。
待解答问题
- 是否需额外配置以自动捕获方法级追踪?
- 若依赖零代码插桩,是否仍需使用
@WithSpan或手动埋点? - 是否可通过配置启用该功能,还是需显式扩展插桩逻辑?
环境信息
- Java版本:21
- Spring Boot版本:3.3.0
- OpenTelemetry Spring Boot Starter版本:2.6.0
解决方案
1. 是否需额外配置以自动捕获方法级追踪?
需要。默认零代码插桩仅自动捕获Spring MVC/WebFlux端点、数据库调用、HTTP客户端请求等基础链路节点,不会主动追踪普通业务方法。你可以通过OpenTelemetry的方法级插桩配置开启该功能。
2. 若依赖零代码插桩,是否仍需使用@WithSpan或手动埋点?
如果通过配置覆盖了需要追踪的方法范围,就不需要额外使用@WithSpan或手动埋点;但如果目标方法不在配置的匹配规则内,或者需要自定义Span名称、添加属性等精细化控制,还是得通过@WithSpan或手动埋点补充。
3. 是否可通过配置启用该功能,还是需显式扩展插桩逻辑?
完全可以通过配置启用,无需显式扩展插桩逻辑。在application.yml中添加方法匹配规则即可,示例如下:
otel: instrumentation: methods: enabled: true includes: # 匹配指定根包下所有类的所有方法 - "com.yourbiz.**.*(..)" # 匹配指定类的特定方法 - "com.yourbiz.service.OrderService.createOrder(..)" # 可选:排除无需追踪的工具类方法 excludes: - "com.yourbiz.util.**.*(..)"
注意事项
- 匹配规则使用通配符语法:
**表示任意子包,*表示任意类/方法名,(..)表示任意参数列表; - 方法级追踪会增加追踪数据量,建议仅针对核心业务方法配置,避免不必要的性能开销;
- 你的OpenTelemetry Spring Boot Starter版本2.6.0已支持该配置项,无需升级依赖。
如果配置后仍未捕获到方法级Span,可排查:
- 配置的包路径、方法名是否与实际代码匹配;
- 应用启动日志中是否有OpenTelemetry方法插桩的加载提示;
- 是否存在配置项拼写错误(如
otel.instrumentation.methods.enabled是否设为true)。
内容的提问来源于stack exchange,提问作者Harshad Panmand
相关产品推荐
相关产品推荐

