我正在使用 Jaeger 跟踪 python 函数。我是否必须在每个函数中手动创建跨度?

I'm using Jaeger tracing python functions. Do i have to create spans in every function manually?

我找到了一个例子:https://medium.com/velotio-perspectives/a-comprehensive-tutorial-to-implementing-opentracing-with-jaeger-a01752e1a8ce

我有一个相当大的代码库,我真的不想通过添加像“with tracer.start_span('booking') as span:”这样的行来修改每个函数。有什么办法吗?

提前致谢。

Jaeger 是一个分布式 跟踪器,灵感来自 Google's Dapper paper,因此它主要用于跟踪 之间的通信微服务/分布式系统架构中的进程,而不是应用程序内部的部分代码。

大多数应用程序引入 Jaeger 的方式是将其集成到应用程序中接收网络请求的部分。例如,如果您的 Python 应用程序正在使用 Django 或 Flask 接收 HTTP 请求,或使用其他框架接收其他类型的请求(例如 gRPC),则互联网上某处可能有一个项目可以让您将 Jaeger 挂接到你的框架有几行代码。对于最流行的框架,Jaeger 文档指出 opentracing-contrib 作为这些“客户端库”的良好来源。

虽然在应用程序内部进行额外的跟踪调用并非闻所未闻或不鼓励 d.tracers,但这种情况不会经常发生,因为 d.tracers 通常用于微服务环境,其中组件之间的交互比组件内部发生的事情更重要。

如果您确实想在应用程序内部创建跟踪记录,那么对每个函数都进行跟踪是很不寻常的。相反,在应用程序内部进行跟踪通常会在 modular monolith 中的组件边界处完成,即当一个组件调用另一个组件时。

最后,如果您真正想要的是在每个功能级别对单个 Python 应用程序进行性能分析,而不关心它与系统中其他应用程序的交互(也许您只关心有吗?),那么 Jaeger 可能不是合适的工具。在这种情况下,您可能希望寻找适用于 Python 并满足您需求的应用程序性能监控或 APM 工具。