Как добавить трассировку Strackdriver с пользовательскими интервалами с помощью библиотеки Opencencsus? - PullRequest
3 голосов
/ 29 мая 2019

Я настраиваю службу Standard, Java, AppEngine и мне нужно отслеживать пользовательское местоположение в коде. Я следовал руководству, предоставленному Google: https://cloud.google.com/trace/docs/setup/java, чтобы настроить трассировку, однако проблема в том, что этот подход создает новую трассу, а не добавляет новые пролеты к трассе, запущенной Google.

Чтобы добавить новые диапазоны к существующей трассе, я попытался извлечь traceId и rootSpanId из заголовка X-Cloud-Trace-Context и использовать метод spanBuilderWithRemoteParent для создания дочерних диапазонов.

Однако проблема в том, что SpanId.fromLowerBase16 ожидает 16-байтовый идентификатор, где 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();

Таким образом, есть ли способ добавить таможенные пролеты к существующей трассировке Stackdriver с помощью библиотеки Opencensus, или мы ограничены использованием Stackdriver Trace API?

...