如何使用Opencencsus库将Strackdriver跟踪附加自定义范围?

时间:2019-05-29 10:07:31

标签: java trace google-cloud-stackdriver opencensus

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

0 个答案:

没有答案