OpenTelemetry

OpenTelemetry 是一个开源项目,旨在通过统一的工具集、API和SDK,简化在多样化的技术栈中集成可观测性功能,确保一致地收集、处理及导出应用性能数据。

如何将 TraceId 写入 HTTP Response Header


默认情况下,TraceId 只会在保存在 HTTP Requst Header 中,如果需要在 HTTP Response Header 中设置 TraceId,可参考本文方法,编写扩展程序以增强 OpenTelemetry Java Agent 的功能。

Java

前提条件

  • 使用 OpenTelemetry Java Agent。
  • OpenTelemetry Java Agent 版本 >= 1.24.0。

编写 OpenTelemetry Java Agent 扩展

  1. 新建项目,pom.xml 中添加依赖。

请替换 <font style="color:rgb(24, 24, 24);">${OPENTELEMETRY_VERSION}</font>,并确保与您使用的OpenTelemetry Java Agent版本一致。

<dependencies>
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>io.opentelemetry.javaagent</groupId>
<artifactId>opentelemetry-javaagent</artifactId>
<version>${OPENTELEMETRY_VERSION}</version>
<scope>compile</scope>
</dependency>
</dependencies>
  1. 新建 AgentHttpResponseCustomizer 类,实现 HttpServerResponseCustomizer 接口
package org.example;
import com.google.auto.service.AutoService;
import io.opentelemetry.javaagent.shaded.io.opentelemetry.api.trace.Span;
import io.opentelemetry.javaagent.shaded.io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.javaagent.shaded.io.opentelemetry.context.Context;
import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizer;
import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseMutator;
@AutoService(HttpServerResponseCustomizer.class)
public class AgentHttpResponseCustomizer implements HttpServerResponseCustomizer {
@Override
public <RESPONSE> void customize(Context context, RESPONSE response, HttpServerResponseMutator<RESPONSE> responseMutator) {
SpanContext spanContext = Span.fromContext(context).getSpanContext();
String traceId = spanContext.getTraceId();
String spanId = spanContext.getSpanId();
// 在 HTTP Response Header中设置 traceId 和 spanId, Header 字段名可以自定义
responseMutator.appendHeader(response, "TraceId", traceId);
responseMutator.appendHeader(response, "SpanId", spanId);
}
}
  1. 将程序打包成 JAR 包,构建后存储在 target 目录下。
mvn clean pacakage

启动应用时加载 OpenTelemetry Java Agent 扩展

在原有 VM 参数上添加 -Dotel.javaagent.extensions 参数。

-Dotel.javaagent.extensions=/path/to/opentelemetry-java-agent-extension.jar

完整的启动命令示例:

java -javaagent:path/to/opentelemetry-javaagent.jar \
-Dotel.javaagent.extensions=path/to/opentelemetry-java-agent-extension.jar \
-Dotel.resource.attributes=service.name=${service-name} \
-Dotel.exporter.otlp.endpoint=${endpoint} \
-jar yourapp.jar

observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32