opencensus 出口商 - 一个全局或每个线程?

Posted

技术标签:

【中文标题】opencensus 出口商 - 一个全局或每个线程?【英文标题】:opencensus exporter - one global or per thread? 【发布时间】:2019-04-02 23:29:29 【问题描述】:

我正在使用 Opencensus 在有 10 个工作人员的 grpc 服务器上进行一些监控。我的问题是,在制作 Tracer 时,tracer 的导出器应该是本地的还是全局的。浏览器

这是服务器:

server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

我做吗:

tracer_module.Tracer(sampler=always_on.AlwaysOnSampler(), exporter=GLOBAL_EXPORTER) 在哪里: GLOBAL_EXPORTER = stackdriver_exporter.StackdriverExporter(transport=BackgroundThreadTransport)) 或者我是否这样做: tracer_module.Tracer(sampler=always_on.AlwaysOnSampler(), exporter=stackdriver_exporter.StackdriverExporter(transport=BackgroundThreadTransport)))

我都试过了,它们都有效。前者将使用一个更有效的全局导出器(我认为),但聚合似乎有点奇怪(一个调用与另一个调用“聚合”)。另一方面,第二种方式产生了第二个出口商(这是短暂的,因为它只存在于该调用中)并且似乎正确出口。从系统的角度来看,问题更多的是什么更正确。第二个选项的 IE 是否创建 stackdriver_exporter.StackdriverExporter(transport=BackgroundThreadTransport) 会使不同的导出器(在不同的线程中创建)无效?

【问题讨论】:

【参考方案1】:

您应该使用全局导出器。它不打算为每个 Tracer 创建一个新的导出线程。应该有一个正在运行的后台线程来处理所有导出到 StackDriver 的操作。

至于聚合,它不应该将所有跨度聚合在一起。这可能是 StackDriver UI 中的错误(存在许多已知问题)。

【讨论】:

以上是关于opencensus 出口商 - 一个全局或每个线程?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenCensus 检测 Prometheus Gauge?

ClassNotFoundException: io.opencensus.trace.propagation.TextFormat 未找到

Zipkin (Opencensus) - 2 个名称相同而不是不同的 Span

Stackdriver 上未显示自定义 OpenCensus 指标

使用 OpenCensus 将 Django 日志导出到 Azure AppInsights

OpenCensus 未在 Stack Driver 中的 Google App Engine 上显示跟踪