flask应用程序的opentracing支持
Flask-OpenTracing的Python项目详细描述
此包允许通过The OpenTracing Project在烧瓶应用程序中进行分布式跟踪。一旦生产系统与真正的并发性竞争或分成许多服务,关键的(以前很容易的)任务就会变得困难:面向用户的延迟优化、后端错误的根本原因分析、关于现在分布式系统的不同部分的通信等。分布式跟踪从一开始就跟随一个请求。从移动/浏览器一直到微服务。
由于核心服务和库采用opentracing,应用程序构建器不再承担向自己的代码添加基本跟踪工具的任务。通过这种方式,开发人员可以使用他们喜欢的工具构建他们的应用程序,并从内置的跟踪工具中获益。OpenCACKIN实现存在于主要的分布式跟踪系统中,并且可以通过一行配置更改来绑定或交换。
如果您想了解有关底层python api的更多信息,请访问pythonsource code。
如果要从0.x系列迁移,可能需要读取breaking changes的列表。
安装
运行以下命令:
$ pip install Flask-Opentracing
用法
此烧瓶扩展允许使用opentracing api跟踪烧瓶应用程序。全部 它需要的是使用 OpenTracing跟踪程序的实例。您可以跟踪到您站点的所有请求,或者使用函数装饰器跟踪特定的单个请求。
注意:可选参数在这两种情况下都是烧瓶的任意数量的属性(作为字符串)。请求在创建的span上设置为标记
初始化
flasktracing包装opentracing支持的跟踪程序实例。要创建flasktracing对象,可以直接传入跟踪对象,也可以传入返回跟踪对象的可调用对象。例如:
importopentracingfromflask_opentracingimportFlaskTracingopentracing_tracer=## some OpenTracing tracer implementationtracing=FlaskTracing(opentracing_tracer,...)
或
importopentracingfromflask_opentracingimportFlaskTracingdefinitialize_tracer():...returnopentracing_tracertracing=FlaskTracing(initialize_tracer,...)
跟踪所有请求
importopentracingfromflask_opentracingimportFlaskTracingapp=Flask(__name__)opentracing_tracer=## some OpenTracing tracer implementationtracing=FlaskTracing(opentracing_tracer,True,app,[optional_args])
跟踪单个请求
importopentracingfromflask_opentracingimportFlaskTracingapp=Flask(__name__)opentracing_tracer=## some OpenTracing tracer implementationtracing=FlaskTracing(opentracing_tracer)@app.route('/some_url')@tracing.trace(optional_args)defsome_view_func():...returnsome_view
手动访问跨距
为了访问请求的跨度,我们提供了一个方法:cTIT> FraskTrace.GETYSPAN(请求)< /cIT>,它返回请求的跨度,如果它存在且未完成。这可用于将重要事件记录到范围、设置标记或创建子范围以跟踪非rpc事件。如果没有传入请求,则将使用当前请求。
跟踪rpc
如果你想创建一个RPC并继续一个现有的跟踪,你可以将当前的跨度注入RPC。例如,如果发出一个http请求,以下代码将继续跨线路跟踪:
@tracing.trace()defsome_view_func(request):new_request=some_http_requestcurrent_span=tracing.get_span(request)text_carrier={}opentracing_tracer.inject(span,opentracing.Format.TEXT_MAP,text_carrier)fork,vintext_carrier.iteritems():new_request.add_header(k,v)...# make request
从0.x中断更改
从1.0版开始,与以前的版本相比发生了一些更改:
- FlaskTracer已重命名为FlaskTracing,尽管FlaskTracing 仍可用作已弃用的名称。
- 当在FlaskTracing创建时间传递Application对象时, trace_all_requests默认为True。
- 当没有提供opentracing.Tracer时,FlaskTracing将依赖于 全球追踪。
更多信息
如果您有兴趣进一步了解opentracing标准,请访问opentracing.io或join the mailing list。如果您想在您的项目中实现opentracing并需要帮助,请随时在community@opentracing.io向我们发送一条消息。