本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置适用于 Python 的 X-Ray 开发工具包
适用于 Python 的 X-Ray 开发工具包具有提供全局记录器的、名为
xray_recorder
的类。您可以配置全局记录器以自定义为传入 HTTP 调用创建分段的中间件。
plugins
用于记录有关托管应用程序的服务的信息。
-
Amazon EC2 —
EC2Plugin添加实例 ID、可用区和 CloudWatch 日志组。 -
Elastic Beanstalk -
ElasticBeanstalkPlugin添加环境名称、版本标签和部署 ID。 -
Amazon ECS —
ECSPlugin添加容器 ID。
要使用插件,请在
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 资源类型。当您使用多个插件时,SDK 使用以下解析顺序来确定来源: ElasticBeanstalk > EKS > ECS > EC2。
该 SDK 使用您在 X-Ray 控制台中定义的采样规则来确定要记录的请求。默认规则跟踪每秒的第一个请求,以及所有将跟踪发送到 X-Ray 的服务的任何其他请求的百分之五。 在 X-Ray 控制台中创建其他规则 以自定义为每个应用程序记录的数据量。
该 SDK 按照定义的顺序应用自定义规则。如果请求与多个自定义规则匹配,则 SDK 仅应用第一条规则。
注意
如果 SDK 无法访问 X-Ray 来获取采样规则,它将恢复为默认的本地规则,即每秒第一个请求以及每个主机所有其他请求的百分之五。如果主机无权调用采样,或者无法连接到 X-Ray 守护程序 APIs,后者充当 SDK 发出的 API 调用的 TCP 代理,则可能会发生这种情况。
您还可以将 SDK 配置为从 JSON 文档加载采样规则。在 X-Ray 采样不可用的情况下,SDK 可以使用本地规则作为备份,也可以只使用本地规则。
例 sampling-rules.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此示例定义了一个自定义规则和一个默认规则。自定义规则采用百分之五的采样率,对于
/api/move/之下的路径要跟踪的请求数量不设下限。默认规则中每秒的第一个请求以及其他请求的百分之十。在本地定义规则的缺点是,固定目标由记录器的每个实例独立应用而不是由 X-Ray 服务管理。随着您部署更多主机,固定速率会成倍增加,这使得控制记录的数据量变得更加困难。
开启后 AWS 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)开发工具包使用 Python 内置的
logging模块,其中包含默认WARNING日志记录级别。获取对aws_xray_sdk类的日志记录器的引用,并对其调用setLevel来为库以及应用程序的其余部分配置不同的日志级别。例 app.py - 日志记录
logging.basicConfig(level='WARNING')logging.getLogger('aws_xray_sdk').setLevel(logging.ERROR)当您手动生成子分段时,使用调试日志来识别诸如未结束子分段之类的问题。
代码中的记录器配置
其他设置包含在
xray_recorder的configure方法中。
context_missing- 设置为LOG_ERROR可避免在您的已检测代码尝试在分段未打开的情况下记录数据时引发异常。
daemon_address- 设置 X-Ray 进程守护程序侦听器的主机和端口。
service- 设置开发工具包用于进行分段的服务名称。
plugins— 记录有关您的应用程序 AWS 资源的信息。
sampling设置为False可禁用采样。
sampling_rules- 设置包含您的采样规则的 JSON 文件的路径。例 main.py - 禁用缺少上下文异常
from aws_xray_sdk.core import xray_recorderxray_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— 记录有关您的应用程序 AWS 资源的信息。
SAMPLING设置为False可禁用采样。
SAMPLING_RULES- 设置包含您的采样规则的 JSON 文件的路径。要启用
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_SDK_ENABLED值,或者通过与aws_xray_sdk库中global_sdk_config对象的直接交互来设置。环境变量的设置会覆盖这些交互。
AWS_XRAY_DAEMON_ADDRESS- 设置 X-Ray 进程守护程序侦听器的主机和端口。默认情况下,SDK 使用用于跟踪数据(UDP)和采样(TCP)的127.0.0.1:2000。如果您已将进程守护程序配置为侦听不同端口或者进程守护程序在另一台主机上运行,则使用此变量。同一个端口 —
address:port不同的端口 —
tcp:address:portudp:address:port
AWS_XRAY_CONTEXT_MISSING- 设置为RUNTIME_ERROR在您的已检测代码尝试在分段未打开的情况下记录数据时引发异常。