3

我尝试将自定义跨度和注释添加到 AppEngine 标准应用程序。在 GCP 控制台的 Traces 页面中,我看到了默认跨度,但没有看到我添加的自定义跨度。

我遵循文档:https : //cloud.google.com/trace/docs/setup/java 我使用最新版本的 opencensus-api 0.23.0

Stackdrive Trace API 已启用,我在 API 的指标页面中看到应用程序成功google.devtools.cloudtrace.v2.TraceService.BatchWriteSpans调用。

我基于重现此问题的官方helloworld应用程序创建了一个示例应用程序。

有趣的部分:

private static final Tracer tracer = Tracing.getTracer();

static {
    try {
        System.out.println("Init StackdriverTraceExporter");
        StackdriverTraceExporter.createAndRegister(
                StackdriverTraceConfiguration.builder()
                        .setProjectId("project-id")
                        .build());
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

public static String getInfo() {

    try (Scope ignored = tracer.spanBuilder("MyChildWorkSpan").setSampler(Samplers.alwaysSample()).startScopedSpan()) {
        tracer.getCurrentSpan().addAnnotation("annotation example");
        try {
            Thread.sleep(100);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        System.out.println("annotation created");
        return "Version: " + System.getProperty("java.version")
                + " OS: " + System.getProperty("os.name")
                + " User: " + System.getProperty("user.name")
                + " Span: " + tracer.getCurrentSpan();
    }
}

你可以在这里看到完整的代码


我发现了我的错误。这是我打开问题时看到的: 跟踪列表 问题是选择了服务和版本。

这些自定义跨度看起来像一个单独的请求,我需要选择所有服务,否则它们会被隐藏。 子跨度

所以至少我可以看到这在某种程度上是有效的,但这不是我想要的。我想实现这样的目标:组合跟踪

如何将我的自定义跨度附加到为请求显示的根跨度?

4

1 回答 1

1

我检查了您的问题,并在我身边进行了一些复制,并且能够添加自定义跨度“MyChildWorkSpan”和注释“注释示例”,这些更改与您从代码使用 Java 8 的 AppEngine Standard 中的 Helloworld 应用程序所做的更改相同.

我使用了 io.opencensus 的两个版本(此处记录的 0.12.2 使用 Maven)和您尝试使用的版本 0.23.0)。在这两种情况下,我都成功地在 Stackdriver Trace 列表中看到了自定义跨度。

您能否附上您在 Google Cloud 控制台 > Stackdriver Trace 列表中浏览到的内容的屏幕截图?你能在那里看到自定义跨度“MyChildWorkSpan”和注释“注释示例”吗?还是您没有看到任何其他自定义跨度/注释?

于 2019-08-27T14:52:21.210 回答