該如何針對 API Gateway REST API 遺失 CloudWatch Logs 進行疑難排解?

上次更新日期:2022 年 8 月 30 日

我已經為 Amazon API Gateway 啟用 Amazon CloudWatch 日誌記錄,但找不到任何日誌。如何取得 CloudWatch Logs 以對 API Gateway REST API 進行疑難排解?

簡短描述

您可以使用 CloudWatch 日誌記錄以協助偵錯與 API 請求執行或用戶端存取相關的問題。CloudWatch 日誌記錄包括執行日誌記錄和存取日誌記錄。

針對執行日誌記錄,API Gateway 會管理 CloudWatch Logs,包括建立日誌群組和日誌串流。針對日誌記錄,您可以建立自己的日誌群組或選擇現有日誌群組。

並非所有 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 Logs。AmazonAPIGatewayPushToCloudWatchLogs 受管政策具有必備許可。

建立帶有 apigateway.amazonaws.comAWS 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 區域已啟用 AWS Security Token Service (AWS STS)。如需詳細資訊,請參閱管理 AWS 區域中的 AWS STS
  • 您想要啟用 CloudWatch Logs 的所有 AWS 區域都會啟用 IAM 角色。

如需詳細資訊,請參閱 CloudWatch 日誌記錄的許可

驗證 API Gateway 日誌記錄設定

確認已針對 API Gateway 啟用 CloudWatch 執行或存取日誌記錄設定。

注意:您可以分別啟動執行日誌記錄和存取日誌記錄。

1.    開啟 API Gateway 主控台

2.    在導覽窗格中,選擇 API (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 (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 日誌記錄