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

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

配置适用于 Node.js 的 X-Ray 开发工具包

您可以配置带有插件的适用于 Node.js 的 X-Ray 开发工具包,以包括应用程序在其上运行的服务的相关信息,修改默认采样行为,或者添加采样规则应用到对特定路径的请求。

服务插件

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

Plugins

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

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

  • Amazon ECS —ECSPlugin添加容器 ID。

要使用插件,请配置适用于 Node.js 客户端的 X-Ray 开发工具包,使用config方法。

例 app.js-插件

var AWSXRay = require('aws-xray-sdk'); AWSXRay.config([AWSXRay.plugins.EC2Plugin,AWSXRay.plugins.ElasticBeanstalkPlugin]);

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 会做出采样决定。

要配置备份规则,请指示适用于 Node.js 的 X-Ray 开发工具包从具有setSamplingRules

例 app.js - 来自文件的采样规则

var AWSXRay = require('aws-xray-sdk'); AWSXRay.middleware.setSamplingRules('sampling-rules.json');

您也可以在代码中定义规则,并将它们作为对象传递给 setSamplingRules

例 app.js-来自对象的采样规则

var AWSXRay = require('aws-xray-sdk'); var rules = { "rules": [ { "description": "Player moves.", "service_name": "*", "http_method": "*", "url_path": "/api/move/*", "fixed_target": 0, "rate": 0.05 } ], "default": { "fixed_target": 1, "rate": 0.1 }, "version": 1 } AWSXRay.middleware.setSamplingRules(rules);

要仅使用本地规则,请调用 disableCentralizedSampling

AWSXRay.middleware.disableCentralizedSampling()

Logging

要从开发工具包中记录输出,请调用 AWSXRay.setLogger(logger),其中 logger 是提供标准日志记录方法 (warninfo 等) 的对象。

例 app.js - 日志记录

var AWSXRay = require('aws-xray-sdk'); // Create your own logger, or instantiate one using a library. var logger = { error: (message, meta) => { /* logging code */ }, warn: (message, meta) => { /* logging code */ }, info: (message, meta) => { /* logging code */ }, debug: (message, meta) => { /* logging code */ } } AWSXRay.setLogger(logger); AWSXRay.config([AWSXRay.plugins.EC2Plugin]);

在运行其他配置方法之前调用 setLogger,确保捕获这些操作的输出。

有关有效日志级别值的列表,请查看环境变量部分中的详细信息。

要配置开发工具包,无需使用日志记录库即可将日志输出到控制台,请使用 AWS_XRAY_DEBUG_MODE 环境变量。

X-Ray 守护程序地址

如果 X-Ray 守护程序侦听之外的端口或主机。127.0.0.1:2000,您可以配置适用于 Node.js 的 X-Ray 开发工具包将跟踪数据发送到不同的地址。

AWSXRay.setDaemonAddress('host:port');

您可以通过名称或 IPv4 地址指定主机。

例 app.js - 守护程序地址

var AWSXRay = require('aws-xray-sdk'); AWSXRay.setDaemonAddress('daemonhost:8082');

如果您已将守护程序配置为在不同的端口上侦听 TCP 和 UDP,则可以同时在守护程序地址设置中指定二者。

例 app.js – 不同的端口上的守护程序地址

var AWSXRay = require('aws-xray-sdk'); AWSXRay.setDaemonAddress('tcp:daemonhost:8082 udp:daemonhost:8083');

此外,您还可以通过使用 AWS_XRAY_DAEMON_ADDRESS 环境变量来设置守护程序地址。

环境变量

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

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

    有效值

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

    • LOG_ERROR— 记录错误并继续。

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

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

    Format

    • 同一端口address:port

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

  • AWS_XRAY_DEBUG_MODE— 设置为TRUE配置开发工具包以将日志输出到控制台,而不是配置记录器

  • AWS_XRAY_LOG_LEVEL — 设置记录器的日志记录程序的日志级别。有效值为 debuginfowarnerrorsilent。将 AWS_XRAY_DEBUG_MODE 设置为 TRUE 时,将忽略此值。

  • AWS_XRAY_TRACING_NAME— 设置开发工具包用于进行分段的服务名称。覆盖您通过 Express 中间件设置的分段名称。