如何在OpenTelemetry Span中集中式展示服务调用方代码信息?
解决方案:集中式为OpenTelemetry Span添加代码模块信息
一、全局Resource配置(一键生效所有Span)
直接通过环境变量或配置文件设置全局资源属性,所有生成的Span都会自动携带这些代码模块信息,完全无需修改业务代码:
- 环境变量方式:设置
OTEL_RESOURCE_ATTRIBUTES=service.module=你的模块标识,team=业务分组,比如订单模块可设为service.module=order-service。在Jaeger中查看Span时,能在Span的Resource区域找到这些属性。 - 配置文件方式:若使用
otel-config.yaml,添加以下配置:
该方案适合整个服务归属同一模块的场景,一次配置全量Span生效。resource: attributes: - key: service.module value: "order-service" - key: service.namespace value: "e-commerce"
二、自定义SpanProcessor(细粒度模块识别)
如果服务包含多个代码模块,需要给不同模块生成的Span附加对应标识,可通过自定义SpanProcessor集中实现,无需侵入业务代码:
- 实现
SpanProcessor接口,在Span启动时根据调用栈识别代码模块并添加属性:public class ModuleSpanProcessor implements SpanProcessor { @Override public void onStart(Context parentContext, ReadWriteSpan span) { // 通过调用栈判断当前代码所属模块 for (StackTraceElement elem : Thread.currentThread().getStackTrace()) { if (elem.getClassName().startsWith("com.yourcompany.order")) { span.setAttribute("code.module", "order-service"); break; } else if (elem.getClassName().startsWith("com.yourcompany.payment")) { span.setAttribute("code.module", "payment-service"); break; } } } @Override public void onEnd(ReadableSpan span) {} @Override public boolean isStartRequired() { return true; } @Override public boolean isEndRequired() { return false; } } - 集中注册该Processor到OpenTelemetry TracerProvider:
该方案能自动识别不同代码模块,给对应Span打上精准的模块标签。OpenTelemetry openTelemetry = OpenTelemetrySdk.builder() .setTracerProvider( SdkTracerProvider.builder() .addSpanProcessor(new ModuleSpanProcessor()) .build() ) .buildAndRegisterGlobal();
三、Spring Boot环境专属配置
如果是Spring Boot项目,可通过自定义OpenTelemetryCustomizer实现无侵入集中配置:
@Component public class ModuleSpanCustomizer implements OpenTelemetryCustomizer { @Override public void customize(OpenTelemetrySdkBuilder builder) { builder.setTracerProvider( SdkTracerProvider.builder() .addSpanProcessor(new ModuleSpanProcessor()) .build() ); } }
也可以直接在application.properties中配置全局Resource属性:
otel.resource.attributes=service.module=order-service,service.version=1.0.0
内容的提问来源于stack exchange,提问作者beatrice
相关产品推荐
相关产品推荐

