我在 python 和 Jaeger 中使用 opentelemetry api 和 sdk 版本 1.0.0 来查看痕迹。
我有两个相互通信的服务,我可以在 Jaeger 上单独查看每个服务的跟踪,但跨度不是嵌套的(虽然它们应该嵌套)。
此代码段向您展示了我在服务之间传播跟踪的方法。
from opentelemetry import trace
from opentelemetry.trace import set_span_in_context
ctx_parent = trace.SpanContext(
is_remote=True,
trace_id=int(params["trace_id"], 16)
span_id=int(params["span_id"], 16)
)
tracer = trace.get_tracer(__name__)
context = set_span_in_context(ctx_parent)
with tracer.start_as_current_span(
"span_name",
context=context,
kind=trace.SpanKind.SERVER
) as span:
print("Parent span does not appear on Jaeger....")
在以前的 opentelemetry 版本(0.7b1)中,我可以直接使用ctx_parent
而不使用set_span_in_context
它并且工作正常(我在 Jaeger 上可视化嵌套跨度),但不幸的是他们从 pypi 中删除了包,所以我无法再构建我的项目......
谢谢你的帮助 !