为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环境变量设置为false0。在开发 在本地或测试环境中自动检测应用程序。

支持的框架和库

安装和配置

库和仪器

用于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字典或未指定跟踪程序所需的项,则以下环境 在选择默认值之前检查变量:

<表><广告>配置Kwarg环境变量 默认值< /广告><正文>服务名称信号服务名称'signalfx-tracing'jaeger_端点signalfx_endpoint_url'http://localhost:9080/v1/trace'jaeger_密码signalfx\u访问令牌['sampler']['type']信号采样器类型'const'['sampler']['param']signalfx_sampler_param1传播信号传播 '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

注意:sfx py trace本身不能启用django项目的自动检测,因为signalfx跟踪 检测程序仍必须添加到项目设置的已安装应用程序中。一旦指定了应用程序, sfx py trace可按照django instrumentation文档中的说明使用。

此命令行脚本加载器将使用通过 向SignalFX报告跨距的环境变量或参数。然后它将在 在自己的模块命名空间中运行目标应用程序文件。重要的是要注意到由于潜在的 导入forking c时的死锁ode,标准jaeger跟踪程序不能初始化为导入的副作用 语句(请参见:在线程代码中导入" rel="nofollow">python线程文档"和 已知的jaeger问题)。 由于这个问题,并且由于普遍缺乏http报告支持,我们强烈建议您使用我们修改过的jaeger tracer提供延迟线程创建以避免此限制。

跟踪装饰器

并非所有的应用程序都遵循其框架所允许的基本架构模式,而且没有一个工具 能够在没有用户输入的情况下表示所有用例。把孤立的痕迹有意义地统一成一个 代表性结构,或将大跨度分解为功能单元,手动仪表将 变得必要。signalfx跟踪库提供了一个有用的函数decorator来自动创建跨度 用于跟踪自定义逻辑:

fromsignalfx_tracingimportauto_instrument,create_tracertracer=create_tracer(service_name='MyService')auto_instrument(tracer)
2

在上面的示例中,任何调用my_function()都将导致至少包含三个跨度的跟踪 其关系反映调用图。如果要从另一个跟踪函数或 自动检测的请求处理程序,其结果范围将由调用方函数的范围为父。

注意:如示例所示,@trace必须应用于@classmethod@staticmethod之前的跟踪方法 修饰符的计算(在之后声明),因为该实用程序不考虑它们各自的描述符 此时的实现。不这样做可能会导致应用程序中出现不希望的行为。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
异常如何在java中优雅地处理FileNotFoundexception   java线程卡在BlockingQueue上。无缘无故   类网格程序w/java   StrutsJava:动态应用Velocity脚本   java在运行时重写/禁用方面   java Apache POI无法正确读取Excel单元格中的秒数   具有不同用户权限的Java文件夹/文件创建   java我可以检查Firebase ValueEventListener onDataChanged是否已被调用吗?   尽管获得了用户权限,java Android开发文件权限仍被拒绝   java如何使用JPA映射map<EnumType,Double>?   java是否使用UI线程显示toast消息?   JAVAlang.IllegalArgumentException:不支持的元素:rss   java Android setRequestedOrientation活动和视图生命周期   安卓如何在Java中定义支票盒?   在Java中,对于大输入,字符串解析长期失败   使Java在XP中按计划任务运行读取env用户变量时出现问题   任务“:workflowsjava:NodeDriver”的梯度执行失败。main()   java如何检测是否只设置了部分属性?   在客户端web服务上使用JBossWS时,java无法找到/更改log4j的默认配置   java LibGDX写入文本文件并接收各种错误