如何使用 Stackdriver Trace 在 App Engine Standard 中创建自定义跨度?
How to use Stackdriver Trace to create custom spans in App Engine Standard?
我尝试向 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();
}
}
可以看到完整代码here
我发现了我的错误。
这是我打开问题时看到的:
问题是服务和版本是 selected.
这些自定义跨度看起来像一个单独的请求,我需要 select 所有服务,否则它们将被隐藏。
所以至少我可以看到这在某种程度上是有效的,但这不是我想要的。我想实现这样的目标:
如何将我的自定义跨度附加到为请求显示的根跨度?
我检查了你的问题,并在我这边做了一些复制,我能够添加自定义跨度 "MyChildWorkSpan" 和注释 "annotation example" 进行与你对 [=10] 所做的相同的更改=].
我使用了 io.opencensus 的两个版本(here(使用 Maven)记录的 0.12.2 和您尝试使用的版本 0.23.0)。在这两种情况下,我都成功地在 Stackdriver Trace 列表中看到了自定义跨度。
能否附上浏览至 Google 云控制台 > Stackdriver Trace 列表时所见内容的屏幕截图?你能在那里看到自定义跨度 "MyChildWorkSpan" 和注释 "annotation example" 吗?还是您没有看到任何其他习俗 span/annotation?
我尝试向 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();
}
}
可以看到完整代码here
我发现了我的错误。
这是我打开问题时看到的:
这些自定义跨度看起来像一个单独的请求,我需要 select 所有服务,否则它们将被隐藏。
所以至少我可以看到这在某种程度上是有效的,但这不是我想要的。我想实现这样的目标:
如何将我的自定义跨度附加到为请求显示的根跨度?
我检查了你的问题,并在我这边做了一些复制,我能够添加自定义跨度 "MyChildWorkSpan" 和注释 "annotation example" 进行与你对 [=10] 所做的相同的更改=].
我使用了 io.opencensus 的两个版本(here(使用 Maven)记录的 0.12.2 和您尝试使用的版本 0.23.0)。在这两种情况下,我都成功地在 Stackdriver Trace 列表中看到了自定义跨度。
能否附上浏览至 Google 云控制台 > Stackdriver Trace 列表时所见内容的屏幕截图?你能在那里看到自定义跨度 "MyChildWorkSpan" 和注释 "annotation example" 吗?还是您没有看到任何其他习俗 span/annotation?