Skip to main content

对 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 (37.9 kB 查看哈希)

已上传 source