我正在使用 Opencensus 在有 10 个工作人员的 grpc 服务器上进行一些监控。我的问题是,在制作 Tracer 时,tracer 的导出器应该是本地的还是全局的。IE
这是服务器:
服务器 = 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) 使不同的导出器(在不同的线程中创建)无效?