我正在设置标准、Java、AppEngine 服务,我需要在代码中跟踪自定义位置。我已按照 Google 提供的教程进行操作:https ://cloud.google.com/trace/docs/setup/java来设置跟踪,但问题是这种方法会创建一个新的跟踪,而不是将新的跨度附加到由 Google 启动的跟踪。
要将新跨度附加到现有跟踪,我尝试从X-Cloud-Trace-Context
标头中提取 traceId 和 rootSpanId,并使用spanBuilderWithRemoteParent
方法创建子跨度。
但是,问题在于,SpanId.fromLowerBase16
需要一个 16 字节的 ID,而 rootSpanId 的长度为 19 字节。因此我的代码抛出java.lang.IllegalArgumentException: Invalid size: expected 16, got 19
异常。
代码示例:
List<String> traceHeaders = headers.get("X-Cloud-Trace-Context");
String traceID = "";
String rootSpanId = "";
if (traceHeaders.size() > 0) {
traceID = traceHeaders.get(0).split("/")[0];
rootSpanId = traceHeaders.get(0).split("/")[1].split(";")[0];
}
Span sp1 =
tracer
.spanBuilderWithRemoteParent(
"fetch-data",
SpanContext.create(
TraceId.fromLowerBase16(traceID),
SpanId.fromLowerBase16(rootSpanId), <- exception thrown here
tracer.getCurrentSpan().getContext().getTraceOptions()))
.setSampler(Samplers.alwaysSample())
.startSpan();
因此,有没有办法使用 Opencensus 库将自定义跨度附加到现有的 Stackdriver 跟踪,或者我们是否仅限于使用 Stackdriver Trace API?