Django应用程序的OpenTracing支持
项目描述
本包通过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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 73559bf00facdcfdfb398a8ad76154ae902e0fd678db5b70bf1f74bc8f8df1a1 |
|
MD5 | 9c6a3e35a78901095227c99952f91380 |
|
BLAKE2b-256 | 1dcffdf089df0636604190501b585ba800beb0b3c355f0bc1ea4286210e7d447 |
django_opentracing-1.1.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7be785401f7c608bf502c798d56cade256af134be7908e8e320ca12c1694fc48 |
|
MD5 | 85ff7fe50511dcc9795ff033799de848 |
|
BLAKE2b-256 | d2944405a6e1ee8d383e4374dfae9a5103cd4ef94af3f9ed1200fbc625bef6a5 |