配置适用于 Python 的 X-Ray 开发工具包 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置适用于 Python 的 X-Ray 开发工具包

适用于 Python 的 X-Ray 软件开发工具包具有名为xray_recorder提供全局记录器的。您可以配置全局记录器以自定义为传入 HTTP 调用创建分段的中间件。

服务插件

使用plugins记录有关托管您应用程序的服务的信息。

Plugins

  • Amazon EC2 —EC2Plugin会添加实例 ID、可用区和 CloudWatch Logs 组。

  • Elastic Beanstalk —ElasticBeanstalkPlugin添加环境名称、版本标签和部署 ID。

  • Amazon ECS —ECSPlugin添加容器 ID。


        使用 Amazon EC2 和 Elastic Beanstalk 插件对资源数据进行细分。

要使用插件,请在 xray_recorder 上调用 configure

from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch_all xray_recorder.configure(service='My app') plugins = ('ElasticBeanstalkPlugin', 'EC2Plugin') xray_recorder.configure(plugins=plugins) patch_all()
注意

因为plugins作为元组传递,请务必包含尾部,指定单个插件时。例如,plugins = ('EC2Plugin',)

您还可以使用环境变量来配置记录器,它优先于在代码中设置的值。

配置插件,然后再修补库,从而记录下游调用。

SDK 还使用插件设置来设置origin字段。这指示运行您的应用程序的 AWS 资源类型。资源类型显示在服务映射中您的应用程序名称下。例如:AWS::ElasticBeanstalk::Environment

具有资源类型的服务节点。

当您使用多个插件时,SDK 将使用以下解析顺序来确定源:ElasticBeanstalk > EKS > 弹性云服务器 > EC2。

采样规则

开发工具包使用您在 X-Ray 控制台中定义的采样规则来确定要记录的请求。默认规则每秒跟踪第一个请求,以及向 X-Ray 发送跟踪的所有服务中所有其他请求的 5%。在 X-Ray 控制台中创建其他规则以自定义为每个应用程序记录的数据量。

开发工具包按定义的顺序应用自定义规则。如果请求匹配多个自定义规则,则 SDK 仅应用第一个规则。

注意

如果 SDK 无法访问 X-Ray 获取采样规则,它将恢复为默认的本地规则,即每秒第一个请求和每个主机所有其他请求的 5%。如果主机没有调用采样 API 的权限,或者无法连接到 X-Ray 守护程序,该程序充当 SDK 发出的 API 调用的 TCP 代理,则会发生这种情况。

您还可以将开发工具包配置为从 JSON 文档加载采样规则。对于 X-Ray 采样不可用的情况,SDK 可以使用本地规则作为备份,或专门使用本地规则。

例 采样规则 .json

{ "version": 2, "rules": [ { "description": "Player moves.", "host": "*", "http_method": "*", "url_path": "/api/move/*", "fixed_target": 0, "rate": 0.05 } ], "default": { "fixed_target": 1, "rate": 0.1 } }

此示例定义了一个自定义规则和一个默认规则。自定义规则应用 5% 的采样速率,没有最小数量的路径跟踪请求/api/move/。默认规则每秒跟踪第一个请求和 10% 的其他请求。

本地定义规则的缺点是,固定目标由记录器的每个实例独立应用,而不是由 X-Ray 服务管理。当您部署更多主机时,固定速率会倍增,从而使控制记录的数据量变得更加困难。

在 上Amazon Lambda,则无法修改采样速率。如果您的函数由分析服务调用,则 Lambda 将记录生成该服务采样的请求的调用。如果启用了活动跟踪并且没有跟踪标头,则 Lambda 会做出采样决定。

要配置备份采样规则,请调用 xray_recorder.configure,如以下示例所示,其中 rules 是规则字典,或者是包含采样规则的 JSON 文件的绝对路径。

xray_recorder.configure(sampling_rules=rules)

要仅使用本地规则,请使用 LocalSampler 配置记录器。

from aws_xray_sdk.core.sampling.local.sampler import LocalSampler xray_recorder.configure(sampler=LocalSampler())

您还可以配置全局记录器以禁止对所有传入请求进行采样和分析。

例 main.py — 禁用采样

xray_recorder.configure(sampling=False)

Logging

开发工具包使用 Python 的内置 logging 模块。获取对 aws_xray_sdk 类的日志记录器的引用,并对其调用 setLevel 来为库以及应用程序的其余部分配置不同的日志级别。

例 app.py — 日志记录

logging.basicConfig(level='WARNING') logging.getLogger('aws_xray_sdk').setLevel(logging.DEBUG)

当您手动生成子分段时,使用调试日志来识别诸如未结束子分段之类的问题。

代码中的记录器配置

其他设置包含在 xray_recorderconfigure 方法中。

  • context_missing— 设置为LOG_ERROR可避免在您的已检测代码尝试在分段未打开的情况下记录数据时引发异常。

  • daemon_address— 设置 X-Ray 守护程序侦听器的主机和端口。

  • service— 设置开发工具包用于进行分段的服务名称。

  • plugins— 记录有关应用程序的Amazon资源的费用。

  • sampling— 设置为False以禁用采样。

  • sampling_rules— 设置包含您的采样规则

例 main.py — 禁用缺少上下文异常

from aws_xray_sdk.core import xray_recorder xray_recorder.configure(context_missing='LOG_ERROR')

使用 Django 时的记录器配置

如果您使用 Django 框架,您可以使用 Django settings.py 文件来配置全局记录器的选项。

  • AUTO_INSTRUMENT(仅限 Django)-记录内置数据库和模板呈现操作的子分段。

  • AWS_XRAY_CONTEXT_MISSING— 设置为LOG_ERROR可避免在您的已检测代码尝试在分段未打开的情况下记录数据时引发异常。

  • AWS_XRAY_DAEMON_ADDRESS— 设置 X-Ray 守护程序侦听器的主机和端口。

  • AWS_XRAY_TRACING_NAME— 设置开发工具包用于进行分段的服务名称。

  • PLUGINS— 记录有关应用程序的Amazon资源的费用。

  • SAMPLING— 设置为False以禁用采样。

  • SAMPLING_RULES— 设置包含您的采样规则

要启用 settings.py 中的记录器配置,请将 Django 中间件添加到已安装应用程序列表中。

例 settings.py — 已安装的应用程序

INSTALLED_APPS = [ ... 'django.contrib.sessions', 'aws_xray_sdk.ext.django', ]

在名为 XRAY_RECORDER 的 dict 中配置可用设置。

例 settings.py — 已安装的应用程序

XRAY_RECORDER = { 'AUTO_INSTRUMENT': True, 'AWS_XRAY_CONTEXT_MISSING': 'LOG_ERROR', 'AWS_XRAY_DAEMON_ADDRESS': '127.0.0.1:5000', 'AWS_XRAY_TRACING_NAME': 'My application', 'PLUGINS': ('ElasticBeanstalkPlugin', 'EC2Plugin', 'ECSPlugin'), 'SAMPLING': False, }

环境变量

您可以使用环境变量配置适用于 Python 的 X-Ray 开发工具包。开发工具包支持以下变量:

  • AWS_XRAY_TRACING_NAME— 设置开发工具包用于进行分段的服务名称。覆盖您以编程方式设置的服务名称。

  • AWS_XRAY_SDK_ENABLED— 当设置为false,则会禁用开发工具包。默认情况下,开发工具包处于启用状态,除非环境变量设置为 false。

    • 禁用时,全局记录器会自动生成不发送到守护程序的虚拟分段和子分段,并禁用自动修补。中间件是作为全局记录器的包装器编写的。通过中间件生成的所有分段和子分段也成为虚拟分段和虚拟子分段。

    • 通过环境变量设置 AWS_XRAY_SDK_ENABLED 值,或者通过与 aws_xray_sdk 库中 global_sdk_config 对象的直接交互来设置。环境变量的设置会覆盖这些交互。

  • AWS_XRAY_DAEMON_ADDRESS— 设置 X-Ray 守护程序侦听器的主机和端口。默认情况下,开发工具包使用127.0.0.1:2000用于跟踪数据 (UDP) 和采样 (TCP)。如果您已将守护进程配置为侦听其他端口或者它正在其他主机上运行。

    Format

    • 相同端口address:port

    • 不同端口tcp:address:port udp:address:port

  • AWS_XRAY_CONTEXT_MISSING— 设置为LOG_ERROR可避免在您的已检测代码尝试在分段未打开的情况下记录数据时引发异常。

    有效值

    • RUNTIME_ERROR— 抛出运行时异常(默认值)。

    • LOG_ERROR— 记录错误并继续。

    对于在未打开任何请求时运行的启动代码或者会生成新线程的代码,如果您尝试在其中使用分析过的客户端,则可能发生与缺失分段或子分段相关的错误。

环境变量覆盖在代码中设置的值。