如何对 API Gateway REST API 的 CloudWatch 日志缺失进行故障排除?

2 分钟阅读
0

我已经为 Amazon API Gateway 激活了 Amazon CloudWatch 日志记录,但我找不到任何日志。

简短描述

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

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

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

有关详细信息,请参阅用于 API Gateway 的 CloudWatch 日志格式

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

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

有关详细信息,请参阅监控 REST API

解决方法

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

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

创建 AWS Identity and Access Management (IAM) 角色,将 apigateway.amazonaws.com 作为其可信实体。然后,将以下策略附加到 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 区域激活 AWS Security Token Service (AWS STS)。有关详细信息,请参阅在 AWS 区域中管理 AWS STS
  • 对于要激活 CloudWatch 日志的所有 AWS 区域,IAM 角色均已激活。

有关详细信息,请参阅 CloudWatch 日志记录的权限

验证 API Gateway 日志记录设置

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

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

  1. 打开 API Gateway 控制台
  2. 在导航窗格中,选择 API
  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 启用 Log full requests/responses data(记录完整的请求/响应数据),这可能会导致记录敏感数据。
  6. Custom Access Logging(自定义访问日志记录)中,确认已选择 Enable Access Logging(启用访问日志记录)。

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

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

  1. 打开 API Gateway 控制台
  2. 在导航窗格中,选择 API
  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 日志中查找 API Gateway REST API 错误?

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

如何启用 CloudWatch Logs 以对 API Gateway REST API 或 WebSocket API 进行故障排除?

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