对Sanic应用程序的OpenTracing支持

sanic-opentracing的Python项目详细描述


Sanic OpenTracing公司

此包通过The OpenTracing Project在Sanic应用程序中启用分布式跟踪。一旦一个生产系统与真正的并发性相抗衡或被分割成许多服务,关键的(以前很容易的)任务就变得很困难:

  • 面向用户的延迟优化
  • 后端错误的根本原因分析
  • 关于现在分布式系统的不同部分的通信

分布式跟踪遵循从开始到完成从移动/浏览器到微服务的整个过程中的请求。在

随着核心服务和库采用OpenTracing,applicationbuilder不再承担向自己的代码添加基本跟踪工具的任务。通过这种方式,开发人员可以使用他们喜欢的工具来构建他们的应用程序,并从内置的跟踪工具中获益。OpenTracing实现适用于主要的分布式跟踪系统,可以通过一行配置更改进行绑定或交换。在

如果您想了解更多关于底层python API的信息,请访问pythonsource code。在

安装

运行以下命令:

 $ pip install sanic_opentracing

使用

这个Sanic扩展允许使用OpenTracing API跟踪Sanic应用程序。全部 它需要的是使用 OpenTracing跟踪程序的实例。您可以跟踪站点的所有请求,也可以使用函数修饰符跟踪特定的单个请求。在

注意:optional_args在这两种情况下,sanic.Request的任何数量的属性(作为字符串)都要设置为所创建的span上的标记

初始化

SanicTracing包装opentracing支持的跟踪程序实例。要创建SanicTracing对象,可以直接传入跟踪对象,也可以传递返回跟踪对象的可调用对象。例如:

^{pr2}$

或者

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 

手动访问跨距

为了访问请求的范围,我们提供了一个方法SanicTracing.get_span(request),如果请求存在且未完成,则返回请求的范围。这可用于将重要事件记录到span、设置标记或创建子span以跟踪非RPC事件。如果没有传入请求,则使用当前请求。在

跟踪RPC

如果要生成RPC并继续现有跟踪,可以将当前范围注入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

示例

请参见Examples查看并运行带有集成OpenTracing跟踪程序的Sanic应用程序示例。在

开发工作流程

参考文献

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在Eclipse中使用ctrlshiftt而不是ctrlshiftr有什么好处?   java自动装箱概念SCJP   java如何使用JAXR和Resteasy、Angular和Wildfly10处理COR   java如何在整数数组中动态添加元素?   JAVA从继承生成器模式返回父对象继承   java问题调试生产者消费者问题   java MQ:已达到通道的最大实例数   JavaPowerMockMockito:我试图stubb的方法最终被调用   java Hibernate将多个列映射到一个表   在java中,将字符串中的单词大写,但跳过字符串中的数字和多余空格或符号   使用Eclipse将Java项目导出到JAR时出现“重复条目”错误   java使用eclipselink在实体表上指定NullConstraint   <Java>我可以在TCPIP中使用多个服务器socket吗?   带有自定义视图的java AlertDialog:调整大小以包装视图的内容   如何从用C#编写的web服务生成用于java的SOAP API?