我想对为何在为 Amazon API Gateway 激活 Amazon CloudWatch Logs 后却找不到任何日志进行故障排除。
简短描述
当您在 API Gateway 中为 REST API 设置 CloudWatch 日志记录时,可以使用执行日志记录和访问日志记录。API Gateway 不会将其拒绝的所有客户端错误记录到执行日志中。例如,如果客户端向您的 REST API 的错误资源路径发出 API 请求,则客户端会收到以下响应:"403 Missing Authentication Token"。API Gateway 不会将此类响应记录到执行日志中。要对客户端错误进行故障排除,请使用 CloudWatch 访问日志记录。
API Gateway 可能不会为以下错误生成日志:
- "413 Request Entity Too Large"错误
- "431 Request Header Fields Too Large"错误
- "Excessive 429 Too Many Requests"错误
- 因客户端向未进行 API 映射的自定义域发送请求而发生的 400 系列错误
- 因内部故障而发生的 500 系列错误
有关详细信息,请参阅监控 API Gateway 中的 REST API。
解决方法
验证 API Gateway 对 CloudWatch Logs 的权限
要激活 CloudWatch Logs,您必须授予 API Gateway 权限,以便为您的 AWS 账户读取日志并将日志写入到 CloudWatch。
首先,创建一个 AWS Identity and Access Management (IAM) 角色,并将 apigateway.amazonaws.com 作为可信实体。然后,将 AmazonAPIGatewayPushToCloudWatchLogs AWS 托管式策略附加到该角色。将该角色的 Amazon 资源名称 (ARN) 设置为您账户的 cloudwatchRoleArn。
策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents",
"logs:GetLogEvents",
"logs:FilterLogEvents"
],
"Resource": "*"
}
]
}
**注意:**确保为您的 AWS 区域激活 AWS Security Token Service (AWS STS)。此外,请确认您已为要激活 CloudWatch Logs 的所有区域激活了 IAM 角色。
有关详细信息,请参阅在 AWS 区域中激活和停用 AWS STS 和 CloudWatch 日志记录的权限。
验证 API Gateway 日志记录设置
验证您是否为 API Gateway 正确设置了 CloudWatch 执行或访问日志记录设置。
**注意:**您可以分别激活执行日志记录和访问日志记录。
完成以下步骤:
- 打开 API Gateway 控制台。
- 在导航窗格中,选择 APIs。
- 选择您的 API,然后选择 Stages(阶段)。
- 选择您的阶段,然后选择 Logs/Tracing(日志/跟踪)选项卡。
- 在 CloudWatch Settings(CloudWatch 设置)中,选择 Enable CloudWatch Logs(启用 CloudWatch Logs)。
- 将 Log level(日志级别)设置为 ERROR 和 INFO。
**注意:**如果您将 Log level(日志级别)设置为 ERROR,则 API Gateway 仅会记录请求错误,不会记录成功的 API 请求。
- 选择 Data tracing(数据跟踪),以为您的阶段启用数据跟踪日志记录。
注意:对于生产 API,最佳做法是不要激活数据跟踪,因为 API Gateway 可能会记录敏感数据。
- 对于 Custom Access Logging(自定义访问日志记录),选择 Enable Access Logging(启用访问日志记录)。
验证您的日志记录方法
默认情况下,所有 API 资源都使用与 API 资源阶段相同的配置。如果您不想继承该阶段,请覆盖此设置并设置不同的配置。
要验证您的日志记录方法,请完成以下步骤:
- 打开 API Gateway 控制台。
- 在导航窗格中,选择 APIs。
- 选择您的 API,然后选择 Stages(阶段)。
- 在 Stages(阶段)中,展开您的阶段名称。然后选择您的 HTTP 方法,例如 GET。
- 在 Settings(设置)下,选择 Override for this method(覆盖此方法)。
**注意:**要进行其他日志更改,请在 CloudWatch settings(CloudWatch 设置)部分中更新必要的设置。
- 选择 Save Changes(保存更改)。
相关信息
如何在我的 CloudWatch 日志中查找 API Gateway REST API 错误?
我如何为 API Gateway 设置访问日志记录?
如何启用 CloudWatch Logs 以对 API Gateway REST API 或 WebSocket API 进行故障排除?