opencensus 出口商 - 一个全球或每个线程?
opencensus exporter - one global or per thread?
我正在使用 Opencensus 在有 10 个工作人员的 grpc 服务器上做一些监控。我的问题是,在制作示踪剂时,示踪剂的出口商应该是本地的还是全球的。浏览器
这是服务器:
服务器 = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
我会做吗:
tracer_module.Tracer(采样器=always_on.AlwaysOnSampler(), 导出器=GLOBAL_EXPORTER)
在哪里:
GLOBAL_EXPORTER = stackdriver_exporter.StackdriverExporter(传输=BackgroundThreadTransport))
或者我这样做:
tracer_module.Tracer(sampler=always_on.AlwaysOnSampler(), exporter=stackdriver_exporter.StackdriverExporter(transport=BackgroundThreadTransport)))
我都试过了,它们都有效。前者将使用一个全球出口商,它应该更有效率(我认为)但聚合似乎有点奇怪(一个调用“与另一个调用聚合”)。另一方面,第二种方式创建了第二个导出器(它是短暂的,因为它只存在于那个调用中)并且看起来确实可以正确导出。从系统的角度来看,问题更多是什么更正确。 IE 的第二个选项是否创建 stackdriver_exporter.StackdriverExporter(transport=BackgroundThreadTransport) 使不同的导出器(在不同的线程中创建)无效?
您应该使用全局导出器。并不是要为每个 Tracer 创建一个新的导出线程。应该有一个后台线程 运行 处理所有向 StackDriver 的导出。
至于聚合,它不应该是将所有跨度聚合在一起。这可能是 StackDriver UI 中的错误(有许多已知问题)。
我正在使用 Opencensus 在有 10 个工作人员的 grpc 服务器上做一些监控。我的问题是,在制作示踪剂时,示踪剂的出口商应该是本地的还是全球的。浏览器
这是服务器:
服务器 = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
我会做吗:
tracer_module.Tracer(采样器=always_on.AlwaysOnSampler(), 导出器=GLOBAL_EXPORTER) 在哪里: GLOBAL_EXPORTER = stackdriver_exporter.StackdriverExporter(传输=BackgroundThreadTransport)) 或者我这样做: tracer_module.Tracer(sampler=always_on.AlwaysOnSampler(), exporter=stackdriver_exporter.StackdriverExporter(transport=BackgroundThreadTransport)))
我都试过了,它们都有效。前者将使用一个全球出口商,它应该更有效率(我认为)但聚合似乎有点奇怪(一个调用“与另一个调用聚合”)。另一方面,第二种方式创建了第二个导出器(它是短暂的,因为它只存在于那个调用中)并且看起来确实可以正确导出。从系统的角度来看,问题更多是什么更正确。 IE 的第二个选项是否创建 stackdriver_exporter.StackdriverExporter(transport=BackgroundThreadTransport) 使不同的导出器(在不同的线程中创建)无效?
您应该使用全局导出器。并不是要为每个 Tracer 创建一个新的导出线程。应该有一个后台线程 运行 处理所有向 StackDriver 的导出。
至于聚合,它不应该是将所有跨度聚合在一起。这可能是 StackDriver UI 中的错误(有许多已知问题)。