故障排除 AWS X-Ray - AWS X-Ray

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

故障排除 AWS X-Ray

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

X-Ray 轨迹地图和追踪详情页面

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

我没有看到我所有的日 CloudWatch 志

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

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

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

  • Lambda 上下文

  • Lambda 函数

  • API Gateway 阶段

  • Amazon ECS 集群

  • 亚马逊 ECS 实例

  • Amazon ECS 服务

  • Amazon ECS 任务

  • Amazon EKS 集群

  • 亚马逊 EKS 命名空间

  • 亚马逊 EKS 节点

  • 亚马逊 EKS pod

  • 亚马逊 EKS 服务

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

当与该节点关联的任何警报处于警报状态时,X-Ray 跟踪地图仅显示该节点的警报图标。

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

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

  • 如果该节点代表一种 AWS 资源,则会关联该特定资源的警报。例如,名为 “MyTable” AWS::DynamoDB::Table 的节点会链接到基于命名空间AWS/DynamoDBTableName维度设置为的指标的所有警报MyTable

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

我在追踪地图上看不到一些 AWS 资源

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

  • 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 尝试录制拨出的呼叫 AWS,但找不到打开的分段。这可在以下情况下发生:

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

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

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

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

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

使用 cls 方法,将适用于 Node.js 的 X-Ray 开发工具包命名空间传递到 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 进程守护程序

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

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