本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
故障排除 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/DynamoDB
且TableName
维度设置为的指标的所有警报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 记录器会丢失对打开的分段的引用。您可以使用
getTraceEntity
和setTraceEntity
方法来获取对当前分段或子分段的引用 (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 加载凭证。如果您使用多种方法提供凭证,将使用优先顺序最高的方法。参阅 运行进程守护程序 了解更多信息。