跳转到主要内容

Django应用程序的OpenTracing支持

项目描述

https://travis-ci.org/opentracing-contrib/python-django.svg?branch=master https://img.shields.io/pypi/v/django_opentracing.svg https://img.shields.io/pypi/pyversions/django_opentracing.svg https://img.shields.io/pypi/dm/django_opentracing.svg

本包通过OpenTracing 项目为 Django 项目启用分布式追踪。一旦生产系统面临真实并发或分裂成许多服务,一些关键(以前容易)的任务变得困难:面向用户的延迟优化、后端错误的根本原因分析、关于现在分布式系统的不同部分的通信等。分布式追踪遵循请求从起点到完成的旅程,从移动/浏览器到微服务。

随着核心服务和库采用 OpenTracing,应用构建者不再需要自己添加基本的追踪工具到代码中。这样,开发者可以使用他们偏好的工具构建应用程序,并从内置的追踪工具中受益。OpenTracing 实现存在于主要的分布式追踪系统中,可以通过一行配置更改进行绑定或交换。

如果您想了解更多关于底层 Python API 的信息,请访问 python 源代码

如果您正在从 0.x 系列迁移,您可能需要阅读重大变更列表

安装

运行以下命令

$ pip install django_opentracing

设置追踪

为了在您的系统中实现追踪,将以下代码行添加到您的站点 settings.py 文件中

import django_opentracing

# OpenTracing settings

# if not included, defaults to True.
# has to come before OPENTRACING_TRACING setting because python...
OPENTRACING_TRACE_ALL = True

# defaults to []
# only valid if OPENTRACING_TRACE_ALL == True
OPENTRACING_TRACED_ATTRIBUTES = ['arg1', 'arg2']

# Callable that returns an `opentracing.Tracer` implementation.
OPENTRACING_TRACER_CALLABLE = 'opentracing.Tracer'

# Parameters for the callable (Depending on the tracer implementation chosen)
OPENTRACING_TRACER_PARAMETERS = {
    'example-parameter-host': 'collector',
}

如果您想直接覆盖 DjangoTracing,可以使用以下方法。这可能会造成导入循环(参见 #10)

# some_opentracing_tracer can be any valid OpenTracing tracer implementation
OPENTRACING_TRACING = django_opentracing.DjangoTracing(some_opentracing_tracer)

注意:有效的请求属性列表请见此处。当您追踪属性时,这意味着创建的跨度将具有属性名称和请求值的标签。

追踪所有请求

为了追踪所有请求,需要将 OPENTRACING_TRACE_ALL 设置为 True(默认)。如果您想追踪所有请求的任何属性,则可以将它们添加到 OPENTRACING_TRACED_ATTRIBUTES 中。例如,如果您想追踪路径和方法,则可以将 OPENTRACING_TRACED_ATTRIBUTES = ['path', 'method'] 设置。

追踪所有请求使用中间件 django_opentracing.OpenTracingMiddleware,因此需要将其添加到 settings.py 文件 MIDDLEWARE_CLASSES 的顶部。

MIDDLEWARE_CLASSES = [
    'django_opentracing.OpenTracingMiddleware',
    ... # other middleware classes
]

追踪单个请求

如果您不希望追踪站点的所有请求,将 OPENTRACING_TRACE_ALL 设置为 False。然后您可以使用函数装饰器来追踪单个视图函数。这可以通过将以下代码行添加到 views.py(或任何包含 URL 处理函数的文件)中完成

from django.conf import settings

tracing = settings.OPENTRACING_TRACING

@tracing.trace(optional_args)
def some_view_func(request):
    ... # do some stuff

此追踪方法不使用中间件,因此不需要将其添加到您的 settings.py 文件中。

可选参数允许追踪请求属性。例如,如果您想追踪元数据,可以传递 @tracing.trace('META')request.META 将被设置为此视图函数所有跨度的标签。

注意:如果 OPENTRACING_TRACE_ALL 设置为 True,则此装饰器将被忽略,包括任何追踪的请求属性。

手动访问跨度

为了访问请求的跨度,我们提供了一个方法 DjangoTracing.get_span(request),它返回请求的跨度(如果它存在且未完成)。这可以用来记录跨度中的重要事件,设置标签,或创建子跨度来追踪非 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.items():
        request.add_header(k,v)
    ... # make request

示例

这是一个示例,展示了一个同时充当客户端和服务器,并集成了OpenTracing跟踪器的Django应用程序。

从0.x版本的重大变更

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

  • DjangoTracer已被重命名为DjangoTracing,尽管还可以使用DjangoTracer作为已弃用的名称。同样,OPENTRACING_TRACER已被重命名为OPENTRACING_TRACING

  • 在使用中间件层时,OPENTRACING_TRACE_ALL默认为True

  • 当未提供opentracing.Tracer时,DjangoTracing将依赖于全局跟踪器。

更多信息

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

项目详情


下载文件

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

源分发

django_opentracing-1.1.0.tar.gz (24.5 kB 查看哈希值)

上传日期

构建分发

django_opentracing-1.1.0-py3-none-any.whl (9.8 kB 查看哈希值)

上传日期 Python 3

django_opentracing-1.1.0-py2-none-any.whl (9.8 kB 查看哈希值)

上传日期 Python 2

支持者