排查 Amazon X-Ray 问题 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

排查 Amazon X-Ray 问题

本主题列出了您在使用 X-Ray API、控制台或 SDK 时可能会遇到的常见错误和问题。如果您发现某个问题未在此处列出,可以使用此页上的反馈按钮来报告。

X-Ray 跟踪地图和跟踪详情页面

如果您在使用 X-Ray 跟踪地图和跟踪详情页面时遇到问题,以下各节可以提供帮助:

我看不到我的所有 CloudWatch 日志

如何配置日志,使其显示在 X-Ray 跟踪地图和跟踪详情页面中,具体取决于服务。

  • 如果已在 API Gateway 中启用了日志记录,则会显示 API Gateway 日志。

并非所有服务地图节点都支持查看关联的日志。查看以下节点类型的日志:

  • Lambda 上下文

  • Lambda 函数

  • API Gateway 阶段

  • Amazon ECS 集群

  • Amazon ECS 实例

  • Amazon ECS 服务

  • Amazon ECS 任务

  • Amazon EKS 集群

  • Amazon EKS 命名空间

  • Amazon EKS 节点

  • Amazon EKS 容器组(pod)

  • Amazon EKS 服务

我未在 X-Ray 跟踪地图上看到我的所有警报

如果与节点关联的任何警报都处于 ALARM 状态,则 X-Ray 跟踪地图仅显示该节点的提示图标。

跟踪地图使用以下逻辑将警报与节点关联:

  • 如果节点代表 Amazon 服务,则包含与该服务关联的命名空间的所有警报都与该节点关联。例如,AWS::Kinesis 类型的节点与基于 CloudWatch 命名空间 AWS/Kinesis 中指标的所有警报关联。

  • 如果节点代表一个 Amazon 资源,则将链接该特定资源上的警报。例如,名为“MyTable”的 AWS::DynamoDB::Table 类型的节点将链接到所有基于具有命名空间 AWS/DynamoDB 的指标且 TableName 维度设置为 MyTable 的警报。

  • 如果节点的类型未知(由名称周围的虚线边框标识),则任何警报均不会与该节点关联。

我没有在跟踪地图上看到某些 Amazon 资源

并非每个 Amazon 资源都由一个专用节点表示。对于对服务的所有请求,某些 Amazon 服务由单个节点表示。将显示以下资源类型,并且每个资源对应一个节点:

  • AWS::DynamoDB::Table

  • AWS::Lambda::Function

    Lambda 函数由两个节点表示:一个表示 Lambda 容器,另一个表示函数。这有助于识别 Lambda 函数的冷启动问题。Lambda 容器节点与警报和控制面板的关联方式与 Lambda 函数节点与警报和控制面板的关联方式相同。

  • AWS::ApiGateway::Stage

  • AWS::SQS::Queue

  • AWS::SNS::Topic

跟踪地图包含太多节点

使用 X-Ray 组将您的地图分成多个地图。有关更多信息,请参阅对组使用筛选表达式

适用 Java 的 X-Ray 开发工具包

错误:线程“Thread-1”中发生异常 com.amazonaws.xray.exceptions.SegmentNotFoundException:无法开始名为“AmazonSNS”的子分段:无法找到分段。

此错误指示 X-Ray SDK 尝试记录对 Amazon 的传出调用,但找不到打开的分段。这可在以下情况下发生:

  • servlet 筛选条件未配置 - X-Ray SDK 会使用名为 AWSXRayServletFilter 的筛选条件为传入请求创建分段。配置 servlet 筛选条件来检测传入请求。

  • 您正在 servlet 代码外部使用检测过的客户端 - 如果您在启动代码或并非运行用于响应传入请求的其他代码中,使用检测过的客户端来发出调用,则必须手动创建一个分段。有关示例,请参阅 检测启动代码

  • 您正在工作线程中使用检测过的客户端 - 当您创建新线程时,X-Ray 记录器会丢失对打开的分段的引用。您可以使用 getTraceEntitysetTraceEntity 方法来获取对当前分段或子分段的引用(Entity),并将其传递回线程内部的记录器。有关示例,请参阅 在工作线程中使用检测的客户端

适用于 Node.js 的 X-Ray 软件开发工具包

问题:CLS 无法与 Sequelize 一起使用

使用 cls 方法,将 X-Ray SDK for Node.js 命名空间传递到 Sequelize。

var AWSXRay = require('aws-xray-sdk'); const Sequelize = require('sequelize'); Sequelize.cls = AWSXRay.getNamespace(); const sequelize = new Sequelize(...);

问题:CLS 无法与 Bluebird 一起使用

使用 cls-bluebird 实现 Bluebird 与 CLS 配合工作。

var AWSXRay = require('aws-xray-sdk'); var Promise = require('bluebird'); var clsBluebird = require('cls-bluebird'); clsBluebird(AWSXRay.getNamespace());

X-Ray 进程守护程序

问题:进程守护程序使用错误的凭证

进程守护程序使用 Amazon SDK 来加载凭证。如果您使用多种方法提供凭证,将使用优先顺序最高的方法。请参阅运行进程守护程序了解更多信息。