python - 如何在 python 中使用 Opentelemtry 跨服务使用嵌套跨度进行跟踪传播?

标签 python open-telemetry

我在 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 中删除了包,因此我无法再构建我的项目......
谢谢你的帮助 !

最佳答案

这就是 Otel Instruments 的工作方式。

from opentelemetry import trace, context
from opentelemetry.propagate import extract
from opentelemetry.context import attach, detach


tracer = trace.get_tracer(__name__)

incoming_request_headers = {"traceparent": "00-00000000000000000000000000000001-0000000000000002-01"}
token = attach(extract(incoming_request_headers))

with tracer.start_as_current_span(
  "span_name",
  kind=trace.SpanKind.SERVER,
) as span:
  print("Parent span does not appear on Jaeger....")

detach(token)

关于python - 如何在 python 中使用 Opentelemtry 跨服务使用嵌套跨度进行跟踪传播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67182181/

相关文章:

go - 如何从字符串 traceid 创建 opentelemetry 跨度

java - 在 Opentelemetry 中,无法获取父跨度

python - 什么是 OpenCV 中最好的头部级联分类器

python - 在 numba jitclass 中声明变量

python - Binance python api查询全局账户余额

amazon-web-services - 如何注册 opentelemetry lambda 扩展?

javascript - azure storage-blob isInstrumentationSuppressed 不是函数

c# - 如何在没有后端收集器的情况下将 opentelemetry 数据导出到文件中进行测试

python - 如何在python,django中将url解码为路径

python - 如何从 pandas diff 获取单元格位置?