对 Sanic 应用程序的 OpenTracing 支持
项目描述
Sanic OpenTracing
这个包通过OpenTracing Project在 Sanic 应用程序中启用分布式跟踪。一旦生产系统应对真正的并发性或拆分为许多服务,关键(以前很容易)的任务就会变得困难:
- 面向用户的延迟优化
- 后端错误的根本原因分析
- 关于现在分布式系统的不同部分的通信
分布式跟踪遵循从开始到完成从移动/浏览器一直到微服务的请求。
随着核心服务和库采用 OpenTracing,应用程序构建者不再需要为自己的代码添加基本的跟踪工具。通过这种方式,开发人员可以使用他们喜欢的工具构建他们的应用程序,并从内置的跟踪工具中受益。主要分布式跟踪系统存在 OpenTracing 实现,并且可以通过单行配置更改绑定或交换。
如果您想了解更多有关底层 Python API 的信息,请访问 Python源代码。
安装
运行以下命令:
$ pip install sanic_opentracing
用法
这个 Sanic 扩展允许使用 OpenTracing API 跟踪 Sanic 应用程序。它所需要的只是SanicTracing使用 OpenTracing 跟踪器的实例来初始化跟踪器。您可以跟踪对您站点的所有请求,也可以使用函数装饰器来跟踪某些单独的请求。
注意: 在这两种情况下,您希望将optional_args任意数量的属性(作为字符串)设置为创建的跨度上的标签sanic.Request
初始化
SanicTracing包装 opentracing 支持的跟踪器实例。要创建SanicTracing对象,您可以直接传入跟踪器对象或返回跟踪器对象的可调用对象。例如:
from sanic_opentracing import SanicTracing
opentracing_tracer = ## some OpenTracing tracer implementation
tracing = SanicTracing(tracer=opentracing_tracer, ...)
或者
from sanic_opentracing import SanicTracing
def initialize_tracer():
...
return opentracing_tracer
tracing = SanicTracing(tracer=opentracing_tracer, ...)
跟踪所有请求
初始化时设置trace_all_requests为。Ture通常,您可能希望它可以通过环境变量进行配置。
from sanic_opentracing import SanicTracing
app = Sanic(__name__)
opentracing_tracer = ## some OpenTracing tracer implementation
tracing = SanicTracing(tracer=jaeger_tracer, trace_all_requests=True, app=app, [optional_args])
跟踪个人请求
使用@tracing.trace()装饰指定跟踪路由。
from sanic_opentracing import SanicTracing
app = Sanic(__name__)
opentracing_tracer = ## some OpenTracing tracer implementation
tracing = SanicTracing(opentracing_tracer)
@app.route('/some_url')
@tracing.trace(optional_args)
def some_view_func():
...
return some_view
手动访问 Span
为了访问请求的跨度,我们提供了一个方法,该方法SanicTracing.get_span(request)返回请求的跨度(如果存在且未完成)。这可用于将重要事件记录到 span、设置标签或创建子 span 以跟踪非 RPC 事件。如果没有传入请求,将使用当前请求。
跟踪 RPC
如果要创建 RPC 并继续现有跟踪,可以将当前 span 注入 RPC。例如,如果发出 http 请求,以下代码将继续通过网络进行跟踪:
@tracing.trace()
def some_view_func(request):
new_request = some_http_request
current_span = tracing.get_span(request)
text_carrier = {}
opentracing_tracer.inject(span, opentracing.Format.TEXT_MAP, text_carrier)
for k, v in text_carrier.iteritems():
new_request.add_header(k,v)
... # make request
例子
请参阅示例以查看和运行具有集成 OpenTracing 跟踪器的 Sanic 应用程序示例。
开发工作流程
参考
项目详情
sanic_opentracing -0.8.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 542dbda9416fc51aaa02975396c06414887545110a387a3b1ef623277c044d73 |
|
| MD5 | 51df3877922036dd3983dc6af085fa3e |
|
| 布莱克2-256 | 9d345d5a23a4ed41e1eaafd2f72766885e241ec15d0a78102d3eea76caa33b99 |