在单个应用程序中,我可以轻松创建(嵌套)跨度,但我试图在多个服务中跟踪 http 请求,而我尝试使用上下文传播的任何方法都不起作用。所以也许我的设置是错误的。
有人可以在python中解释这个的确切要求吗?
据我了解,在每个微服务中,我必须设置我的跨度导出器、收集器和跟踪提供程序。
exporter = JaegerSpanExporter(
service_name="some-name",
agent_host_name="localhost",
agent_port=6831, ) span_processor = BatchExportSpanProcessor(exporter)
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(span_processor) tracer
tracer = trace.get_tracer(__name__)
在我想要检测的类中完成之后,我只需导航到我想要跟踪的服务中的代码块:
def some_method()
with tracer.start_as_current_span("my-span"):
# set some attributes and some events ....
start_some_request()
当我启动我的服务时,跟踪工作完美,我可以在我的 Jaeger UI 上看到它们,但是跨度并没有聚合在单个 http 请求的单个跟踪下。
我知道那里应该有一些上下文传播来实现这一点,但我找不到任何方法可以在 python 中完成这项工作。我正在使用 W3C ContextTrace,但我无法让它工作,而且我不确定是否应该在每个服务中设置跟踪提供程序,或者到底出了什么问题。
我已经阅读了很多文档,但我仍然不知道如何让它工作。