为OpenTracing跟踪库和框架提供自动检测
signalfx-tracing的Python项目详细描述
用于python的signalfx跟踪库:一个opentracing自动检测工具
此实用程序为用户提供自动配置 与OpenTracing 2.0兼容的社区贡献了工具库 对于他们的Python2.7和3.4+应用程序,只需一个函数。
fromsignalfx_tracingimportauto_instrument,create_tracertracer=create_tracer(service_name='MyService')auto_instrument(tracer)
如果不需要自动检测所有适用的库和框架, 通过指定目标模块可以单独启用检测:
fromsignalfx_tracingimportcreate_tracer,instrument,uninstrumenttracer=create_tracer()instrument(tracer,flask=True)# orinstrument(flask=True)# uses the global Tracer from opentracing.tracer by defaultimportflasktraced_app=flask.Flask('MyTracedApplication')@traced_app.route('/hello_world')deftraced_route():# Obtain active span created by traced middlewarespan=tracer.scope_manager.active.spanspan.set_tag('Hello','World')span.log_kv({'event':'initiated'})return'Hello!'# Span is automatically finished after request handleruninstrument('flask')# prevent future registrationsuntraced_app=flask.Flask('MyUntracedApplication')@untraced_app.route('/untraced_hello_world')defuntraced_route():return'Goodbye!'
注意:如果
signalfx_tracing_enabled
环境变量设置为false
或0
。在开发
在本地或测试环境中自动检测应用程序。
支持的框架和库
- django 1.8+-
仪器(django=true)
- elasticsearch 2.0+-
仪器(elasticsearch=true)
- 烧瓶0.10+-
仪器(烧瓶=真)
- psycopg 2.7+-
仪器(psycopg2=true)
- pymongo 3.1+-
仪器(pymongo=true)
- pymysql 0.8+-
仪器(pymysql=true)
- redis py 2.10-
仪器(redis=true)
- 请求2.0+-
仪器(请求=真)
- tornado 4.3+-
仪器(tornado=true)
安装和配置
库和仪器
用于python的signalfx跟踪库通过检测库和框架并配置可用的 用于通过python进行分布式跟踪的工具opentracing api 2.0。 默认情况下,它的内存占用很小,不将任何工具声明为依赖项。也就是说,它在 假设您根据需要安装了2.0兼容的检测工具。由于此api的采用是在 根据仪器,强烈建议您使用有用的引导实用程序 获取并安装任何适用的、功能齐全的仪表以及兼容的跟踪器:
$ pip install signalfx-tracing $ sfx-py-trace-bootstrap
例如,如果您的环境在其python路径中有请求和flask,则相应的opentracing 仪表将安装PIP。同样,由于opentracing contrib instrumentation对api 2.0的支持不是 无处不在,此引导程序有选择地安装 仪器要求文件。因此,我们建议一定要卸载以前的 在运行引导程序之前,最好是在干净的环境中安装仪器。
若要在不安装建议的跟踪程序的情况下运行Instrumentor引导进程,可以从中运行以下命令 项目的源代码树:
$ scripts/bootstrap.py --deps-only
您还可以指定一个目标安装目录,其中包括提供的最新的signalfx跟踪
PYPI:
$ sfx-py-trace-bootstrap -t /my/site/packages/directory
也可以将受支持的检测程序作为克隆存储库:
$ git clone https://github.com/signalfx/signalfx-python-tracing.git # Supported extras are dbapi, django, flask, pymongo, pymysql, redis, requests, tornado $ pip install './signalfx-python-tracing[django,redis,requests]'
注意:对于低于18.0的pip版本,必须包含--流程依赖关系链接
获得所需的乐器版本。
$ git clone https://github.com/signalfx/signalfx-python-tracing.git # pip versions <18.0 $ pip install --process-dependency-links './signalfx-python-tracing[jaeger,tornado]'
示踪剂
并非所有与opentracing兼容的跟踪程序的稳定版本都支持2.0api,因此我们提供
并建议安装一个修改过的jaeger客户端
准备向SignalFX报告。您可以使用
signalfx_tracing.utils.create_tracer()
帮助程序,前提是您已经运行了:
$ sfx-py-trace-bootstrap # or as package extra $ pip install './signalfx-python-tracing[jaeger]'# please use required --process-dependency-links for pip versions <18.0 $ pip install --process-dependency-links './signalfx-python-tracing[jaeger]'# or from project source tree, along with applicable instrumentors $ scripts/bootstrap.py --jaeger # or to avoid applicable instrumentors $ scripts/bootstrap.py --jaeger-only
默认情况下,create_tracer()
将启用具有恒定采样(100%跟踪机会)的跟踪,并报告每个范围
直接发送到SignalFX。如果适用,上下文传播将通过
b3头
fromsignalfx_tracingimportcreate_tracer# sets the global opentracing.tracer by default:tracer=create_tracer()# uses 'SIGNALFX_ACCESS_TOKEN' environment variable if provided# or directly provide your organization access token if not using the Smart Agent to analyze spans:tracer=create_tracer('<OrganizationAccessToken>',...)# or to disable setting the global tracer:tracer=create_tracer(set_global=False)
所有其他create_tracer()
参数都是可以传递给jaeger_client.config
构造函数的参数:
fromsignalfx_tracingimportauto_instrument,create_tracertracer=create_tracer(service_name='MyService')auto_instrument(tracer)0
如果未提供config
字典或未指定跟踪程序所需的项,则以下环境
在选择默认值之前检查变量:
服务名称
信号服务名称
'signalfx-tracing'
jaeger_端点
signalfx_endpoint_url
'http://localhost:9080/v1/trace'
jaeger_密码
signalfx\u访问令牌
无
['sampler']['type']
信号采样器类型
'const'
['sampler']['param']
signalfx_sampler_param
1
传播
信号传播
'b3'
注意:默认情况下create_tracer()
将存储第一次调用时创建的初始跟踪程序并返回
用于后续调用的实例。如果出于某种原因需要多个跟踪器,可以提供
创建跟踪程序(allow_multiple=true)
作为命名参数。
用法
应用程序运行程序
可以在加载时执行用于python自动检测配置的signalfx跟踪库
基于框架和库的应用程序,如
检测说明。
但是,如果您已经安装了推荐的Jaeger客户端(sfx py trace bootstrap),并希望
使用默认设置自动插入适用程序,这是一个有用的sfx py trace
入口点
由安装程序提供:
fromsignalfx_tracingimportauto_instrument,create_tracertracer=create_tracer(service_name='MyService')auto_instrument(tracer)1
注意: 此命令行脚本加载器将使用通过
向SignalFX报告跨距的环境变量或参数。然后它将在
在自己的模块命名空间中运行目标应用程序文件。重要的是要注意到由于潜在的
导入forking c时的死锁ode,标准jaeger跟踪程序不能初始化为导入的副作用
语句(请参见:在线程代码中导入" rel="nofollow">python线程文档"和
已知的jaeger问题)。
由于这个问题,并且由于普遍缺乏http报告支持,我们强烈建议您使用我们修改过的jaeger
tracer提供延迟线程创建以避免此限制。 并非所有的应用程序都遵循其框架所允许的基本架构模式,而且没有一个工具
能够在没有用户输入的情况下表示所有用例。把孤立的痕迹有意义地统一成一个
代表性结构,或将大跨度分解为功能单元,手动仪表将
变得必要。signalfx跟踪库提供了一个有用的函数decorator来自动创建跨度
用于跟踪自定义逻辑: 在上面的示例中,任何调用 注意:如示例所示,sfx py trace
本身不能启用django项目的自动检测,因为signalfx跟踪
检测程序仍必须添加到项目设置的已安装应用程序中。一旦指定了应用程序,
sfx py trace
可按照django instrumentation文档中的说明使用。
跟踪装饰器
fromsignalfx_tracingimportauto_instrument,create_tracertracer=create_tracer(service_name='MyService')auto_instrument(tracer)
2
my_function()
都将导致至少包含三个跨度的跟踪
其关系反映调用图。如果要从另一个跟踪函数或
自动检测的请求处理程序,其结果范围将由调用方函数的范围为父。@trace
必须应用于@classmethod
和@staticmethod
之前的跟踪方法
修饰符的计算(在之后声明),因为该实用程序不考虑它们各自的描述符
此时的实现。不这样做可能会导致应用程序中出现不希望的行为。推荐PyPI第三方库