如何使用 Stackdriver Trace 在 App Engine Standard 中创建自定义 Span?

Posted

技术标签:

【中文标题】如何使用 Stackdriver Trace 在 App Engine Standard 中创建自定义 Span?【英文标题】:How to use Stackdriver Trace to create custom spans in App Engine Standard? 【发布时间】:2019-12-28 18:56:09 【问题描述】:

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

我遵循文档: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();
    

可以查看完整代码here


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

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

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

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

【问题讨论】:

【参考方案1】:

我检查了您的问题,并在我身边进行了一些复制,我能够添加自定义跨度“MyChildWorkSpan”和注释“注释示例”,与您从code 到Helloworld application in AppEngine Standard with Java 8 所做的更改相同.

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

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

【讨论】:

感谢您添加更多上下文和屏幕截图。很高兴听到你能够弄清楚事情。关于将自定义 span 附加到为请求显示的根 span,这听起来像是 Stackdriver 尚未实现的功能请求。我只能建议在公共问题跟踪器中填写功能请求:导航到 cloud.google.com/support/docs/issue-trackers#feature_requests > 管理工具 > 创建新的 Stackdriver Trace 问题。创建完成后,点击星号,您将收到来自 Stackdriver 专门团队的通知。 我已经为此打开了一个功能请求:issuetracker.google.com/issues/140263093

以上是关于如何使用 Stackdriver Trace 在 App Engine Standard 中创建自定义 Span?的主要内容,如果未能解决你的问题,请参考以下文章

来自文件的 C# Stackdriver Trace 凭据

Stackdriver Trace 与 Google Cloud Run

用于 Stackdriver Trace 的 Google Cloud Java 客户端

Spring-Cloud-Gateway 创建的初始 Trace 都命名为“/”,无论路径如何

如何使用 API 或 Terraform 模板在 GCP 中创建 StackDriver 工作区

如何使用JsonPayload参数在StackDriver过滤器中创建通知