我正在设置标准,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?