3

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

4

0 回答 0