为Flask应用程序提供OpenTracing支持
项目描述
注意: 此软件包不再维护或支持。将您的应用程序迁移到使用 opentelemetry-api.
此软件包通过OpenTracing项目在Flask应用程序中启用分布式跟踪。一旦生产系统面临真实的并发性或拆分为多个服务,关键(以前容易)的任务变得困难:用户界面延迟优化、后端错误根本原因分析、关于现在分布式系统不同部分的通信等。分布式跟踪遵循请求从开始到完成的旅程,从移动/浏览器到微服务。
随着核心服务和库采用OpenTracing,应用程序构建者不再需要向自己的代码中添加基本的跟踪工具。这样,开发人员可以使用他们偏好的工具来构建应用程序,并从内置的跟踪工具中受益。对于主要的分布式跟踪系统,存在OpenTracing实现,并且可以通过一行配置更改进行绑定或交换。
如果您想了解更多关于底层Python API的信息,请访问python 源代码.
如果您正在从0.x系列迁移,您可能需要阅读破坏性更改列表.
安装
运行以下命令
$ pip install Flask-Opentracing
用法
此Flask扩展允许使用OpenTracing API跟踪Flask应用程序。它所需的所有内容是使用OpenTracing tracer的实例初始化一个FlaskTracing tracer。您可以跟踪您站点的所有请求,或者使用函数装饰器来跟踪某些单个请求。
注意: 在两种情况下,optional_args都是任何数量的属性(作为字符串),您希望将其设置为创建的span的标签
初始化
FlaskTracing包装了opentracing支持的tracer实例。要创建一个FlaskTracing对象,您可以传入tracer对象直接或是一个返回tracer对象的调用。例如
import opentracing
from flask_opentracing import FlaskTracing
opentracing_tracer = ## some OpenTracing tracer implementation
tracing = FlaskTracing(opentracing_tracer, ...)
或
import opentracing
from flask_opentracing import FlaskTracing
def initialize_tracer():
...
return opentracing_tracer
tracing = FlaskTracing(initialize_tracer, ...)
跟踪所有请求
import opentracing
from flask_opentracing import FlaskTracing
app = Flask(__name__)
opentracing_tracer = ## some OpenTracing tracer implementation
tracing = FlaskTracing(opentracing_tracer, True, app, [optional_args])
跟踪单个请求
import opentracing
from flask_opentracing import FlaskTracing
app = Flask(__name__)
opentracing_tracer = ## some OpenTracing tracer implementation
tracing = FlaskTracing(opentracing_tracer)
@app.route('/some_url')
@tracing.trace(optional_args)
def some_view_func():
...
return some_view
手动访问span
为了访问请求的span,我们提供了一个方法FlaskTracing.get_span(request),它返回请求的span,如果它存在且未完成。这可以用于将重要事件记录到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 tracers的Flask应用程序。
从0.x版本的重大变更
从1.0版本开始,与之前版本相比,发生了一些变化
FlaskTracer已重命名为FlaskTracing,尽管FlaskTracing仍然可以作为已弃用的名称使用。
在创建FlaskTracing时传递Application对象,trace_all_requests默认为True。
如果没有提供opentracing.Tracer,FlaskTracing将依赖于全局tracer。
更多信息
如果您想了解更多关于OpenTracing标准的信息,请访问opentracing.io或加入邮件列表。如果您想在项目中实现OpenTracing并需要帮助,请随时通过community@opentracing.io给我们发邮件。
项目详情
Flask-OpenTracing-2.0.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4de9db3d4f0d2b506ce3874fc721278d41b2e8b0125ea567164be0100df502fe |
|
MD5 | 191f719f63fabab94132e45dec4aa6c3 |
|
BLAKE2b-256 | 0c5dde5de1af2f04e8599fcf14daf73b6f7746829ab64e6ba63ce49701e0bcd3 |
Flask_OpenTracing-2.0.0-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e7086ffb3531a518c6e3bf2b365af4a51e56a0922fdd5ebe91c9ddeeda632e70 |
|
MD5 | fb26ac99f6d6ce7df7780aaa90f3f2e0 |
|
BLAKE2b-256 | 7aad7c21fce22c13b7c98d05f673fe312524f623629e260868ffb9ec3d6296e4 |