Я настраиваю службу 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?