如何排查 API Gateway REST API 的 CloudWatch 日志缺失问题?

2 分钟阅读
0

我已经为 Amazon API Gateway 激活了 Amazon CloudWatch 日志记录,但我找不到任何日志。如何获取 CloudWatch 日志以对 API Gateway REST API 进行问题排查?

简短描述

您可以使用 CloudWatch 日志记录来帮助调试与请求执行或客户端访问您的 API 相关的问题。CloudWatch 日志记录包括执行日志记录和访问日志记录。

对于执行日志记录,API Gateway 管理 CloudWatch 日志,包括创建日志组和日志流。对于访问日志记录,您可以创建自己的日志组或选择现有的日志组。

并非所有被 API Gateway 拒绝的客户端错误都记录到执行日志中。例如,向不正确的 REST API 资源路径发出 API 请求的客户端会返回 403“缺少身份验证令牌”响应。这种类型的响应不会记录到执行日志中。使用 CloudWatch 访问日志记录对客户端错误进行问题排查。

有关更多信息,请参阅 API Gateway 的 CloudWatch 日志格式

API Gateway 可能不会生成以下各项的日志:

  • 413 请求实体太大错误。
  • 429 请求过多错误。
  • 发送到没有 API 映射的自定义域的请求产生的 400 系列错误。
  • 由内部故障导致的 500 系列错误。

有关更多信息,请参阅监控 REST API

解决方法

验证用于 CloudWatch 日志记录的 API Gateway 权限

要激活 CloudWatch Logs,您必须授予 API Gateway 权限,以便为您的账户读取和写入日志到 CloudWatch。AmazonAPIGatewayPushToCloudWatchLogs 托管策略具有必需的权限。

apigateway.amazonaws.com 作为可信实体,以创建 AWS Identity and Access Management(IAM)角色。然后,将以下策略附加到 IAM 角色,并在您的 AWS 账户的 cloudWatchRoleArn 属性上设置 IAM 角色 ARN:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutLogEvents",
        "logs:GetLogEvents",
        "logs:FilterLogEvents"
      ],
      "Resource": "*"
    }
  ]
}

确保:

  • AWS Security Token Service(AWS STS)已针对您的 AWS 区域激活。有关更多信息,请参阅管理 AWS 区域中的 AWS STS
  • 您要在其中激活 CloudWatch 日志的所有 AWS 区域都会激活 IAM 角色。

有关更多信息,请参阅 CloudWatch 日志记录权限

验证 API Gateway 日志记录设置

验证 API Gateway 的 CloudWatch 执行或访问日志记录设置是否已激活。

**注意:**您可以独立激活执行日志记录和访问日志记录。

1.    打开 API Gateway 控制台

2.    从导航窗格中,选择 APIs

3.    选择您的 API,然后选择 Stages(阶段)。

4.    在 Stages(阶段)中,选择您的阶段,然后选择 Logs/Tracing(日志/跟踪)选项卡。

5.    在 CloudWatch Settings(CloudWatch 设置)中,验证以下各项:
已选择 Enable CloudWatch Logs(启用 CloudWatch Logs)。       Log level(日志级别)设置为 INFO。 **注意:**如果日志级别设置为 ERROR,则仅记录 API Gateway 中的错误请求。成功的 API 请求不会被记录。
为其他日志数据选择 Log full requests/responses data(记录完整的请求/响应数据)和 Enable Detailed CloudWatch Metrics(启用详细的 CloudWatch 指标)。 注意:最佳做法是不要为生产 API 启用记录完整请求/响应数据,这可能会导致记录敏感数据。

6.    在 Custom Access Logging(自定义访问日志记录)中,验证 Enable Access Logging(启用访问日志记录)已选中。

验证日志记录方法并在必要时覆盖

默认情况下,所有 API 资源都使用与其阶段相同的配置。如果您不想从阶段继承,则可以覆盖此设置,以使每种方法具有不同的配置。

1.    打开 API Gateway 控制台

2.    从导航窗格中,选择 APIs

3.    选择您的 API,然后选择 Stages(阶段)。

4.    在 Stages(阶段)中,展开您的阶段名称,然后选择您的 HTTP 方法。例如 GET

5.    在 Settings(设置)中,选择 Override for this method(覆盖此方法)。

6.    在 CloudWatch settings(CloudWatch 设置)中,在需要时为您的使用案例进行任何其他日志更改,然后选择 Save Changes(保存更改)。

有关更多信息,请参阅为 API Gateway 中的 REST API 设置 CloudWatch 日志记录


相关信息

如何在我的 CloudWatch Logs 中查找 API Gateway REST API 错误?

如何设置 API Gateway 的访问日志记录?

如何开启 CloudWatch Logs 以对 API 网关 REST API 或 WebSocket API 进行问题排查?

AWS 官方
AWS 官方已更新 2 年前