在 API Gateway 中設定 HTTP API 的記錄 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 API Gateway 中設定 HTTP API 的記錄

您可以開啟記錄,將記錄寫入記 CloudWatch 錄檔。您可以使用記錄變數來自訂日誌的內容。

若要開啟 HTTP API 的記錄功能,您必須執行下列動作。

  1. 確定您的使用者具有啟用記錄所需的許可。

  2. 建立 CloudWatch 記錄檔記錄群組。

  3. 針對 API 的某個階段提供 CloudWatch 記錄檔記錄群組的 ARN。

用以啟用記錄的許可。

若要開啟 API 的記錄功能,您的使用者必須具有下列許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:us-east-2:123456789012:log-group:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:CreateLogGroup", "logs:DescribeResourcePolicies", "logs:GetLogDelivery", "logs:ListLogDeliveries" ], "Resource": "*" } ] }

建立日誌群組並啟動 HTTP API 的記錄

您可以使用 AWS Management Console 或建立記錄群組並啟動存取記錄 AWS CLI。

AWS Management Console
  1. 建立 日誌群組

    若要了解如何使用主控台建立日誌群組,請參閱 Amazon CloudWatch 日誌使用者指南中的建立日誌群組

  2. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  3. 選擇一個 HTTP API。

  4. 在主導覽面板中的 Monitor (監視器) 標籤下,選擇 Logging (記錄)。

  5. 選取要啟動記錄的階段,然後選擇 Select (選取)。

  6. 選擇 Edit (編輯) 以啟動存取記錄。

  7. 開啟存取記錄,輸入記 CloudWatch 錄,然後選取記錄格式。

  8. 選擇儲存

AWS CLI

下列 AWS CLI 命令會建立記錄群組。

aws logs create-log-group --log-group-name my-log-group

您需要日誌群組的 Amazon Resource Name (ARN) 才能啟用記錄。ARN 格式為 ARN: AW: 日誌:區域:帳戶 ID: 日誌組:. log-group-name

下列 AWS CLI 命令會開啟 HTTP API $default 階段的記錄。

aws apigatewayv2 update-stage --api-id abcdef \ --stage-name '$default' \ --access-log-settings '{"DestinationArn": "arn:aws:logs:region:account-id:log-group:log-group-name", "Format": "$context.identity.sourceIp - - [$context.requestTime] \"$context.httpMethod $context.routeKey $context.protocol\" $context.status $context.responseLength $context.requestId"}'

日誌格式範例

一些常用存取日誌格式範例會顯示在 API Gateway 主控台中,並列出如下。

  • CLF (通用日誌格式):

    $context.identity.sourceIp - - [$context.requestTime] "$context.httpMethod $context.routeKey $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  • JSON:

    { "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength", "extendedRequestId": "$context.extendedRequestId" }
  • XML:

    <request id="$context.requestId"> <ip>$context.identity.sourceIp</ip> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <routeKey>$context.routeKey</routeKey> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
  • CSV (逗號分隔值):

    $context.identity.sourceIp,$context.requestTime,$context.httpMethod,$context.routeKey,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId