跳转到主要内容

为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应用程序。

本教程提供了使用Flask-OpentracingJaeger的逐步指南。

从0.x版本的重大变更

从1.0版本开始,与之前版本相比,发生了一些变化

  • FlaskTracer已重命名为FlaskTracing,尽管FlaskTracing仍然可以作为已弃用的名称使用。

  • 在创建FlaskTracing时传递Application对象,trace_all_requests默认为True

  • 如果没有提供opentracing.TracerFlaskTracing将依赖于全局tracer。

更多信息

如果您想了解更多关于OpenTracing标准的信息,请访问opentracing.io加入邮件列表。如果您想在项目中实现OpenTracing并需要帮助,请随时通过community@opentracing.io给我们发邮件。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

Flask-OpenTracing-2.0.0.tar.gz (8.8 kB 查看哈希)

上传时间 源代码

构建分发

Flask_OpenTracing-2.0.0-py3-none-any.whl (9.9 kB 查看哈希)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面