如何用最简单的方式为Golang生成X-Amzn-Trace-Id
how to generate X-Amzn-Trace-Id for Golang in the simplest way
我一直在看这个documentation by AWS
有没有什么简单的方法可以用 X-Ray 生成“X-Amzn-Trace-Id”?
func NewIDGenerator()
不会生成 Root xxx
.
的格式
或者我们可以只使用受信任的库吗?谢谢
首先使用 OpenTelemetry 的跟踪器创建跟踪,然后将该上下文注入 XRAY Propagator 以根据 AWS 的 ID 规范获取 TraceId。
func GetAmazonTraceId(ctx context.Context) string {
propogator := xray.Propagator{}
carrier := propagation.HeaderCarrier{}
propogator.Inject(ctx, carrier)
traceId := carrier.Get("X-Amzn-Trace-Id")
return traceId
}
或者,您可以编写代码将标准跟踪 ID(String) 转换为 Xray 跟踪 ID。
private static final String TRACE_ID_VERSION = "1";
private static final char TRACE_ID_DELIMITER = '-';
private static final int TRACE_ID_DELIMITER_INDEX_1 = 1;
private static final int TRACE_ID_DELIMITER_INDEX_2 = 10;
private static final int TRACE_ID_FIRST_PART_LENGTH = 8;
public static String toXRayTraceId(String traceId) {
return TRACE_ID_VERSION
+ TRACE_ID_DELIMITER
+ traceId.substring(0, TRACE_ID_FIRST_PART_LENGTH)
+ TRACE_ID_DELIMITER
+ traceId.substring(TRACE_ID_FIRST_PART_LENGTH);
}
我一直在看这个documentation by AWS
有没有什么简单的方法可以用 X-Ray 生成“X-Amzn-Trace-Id”?
func NewIDGenerator()
不会生成 Root xxx
.
或者我们可以只使用受信任的库吗?谢谢
首先使用 OpenTelemetry 的跟踪器创建跟踪,然后将该上下文注入 XRAY Propagator 以根据 AWS 的 ID 规范获取 TraceId。
func GetAmazonTraceId(ctx context.Context) string {
propogator := xray.Propagator{}
carrier := propagation.HeaderCarrier{}
propogator.Inject(ctx, carrier)
traceId := carrier.Get("X-Amzn-Trace-Id")
return traceId
}
或者,您可以编写代码将标准跟踪 ID(String) 转换为 Xray 跟踪 ID。
private static final String TRACE_ID_VERSION = "1";
private static final char TRACE_ID_DELIMITER = '-';
private static final int TRACE_ID_DELIMITER_INDEX_1 = 1;
private static final int TRACE_ID_DELIMITER_INDEX_2 = 10;
private static final int TRACE_ID_FIRST_PART_LENGTH = 8;
public static String toXRayTraceId(String traceId) {
return TRACE_ID_VERSION
+ TRACE_ID_DELIMITER
+ traceId.substring(0, TRACE_ID_FIRST_PART_LENGTH)
+ TRACE_ID_DELIMITER
+ traceId.substring(TRACE_ID_FIRST_PART_LENGTH);
}