为 API Gateway 中的 HTTP API 配置日志记录 - Amazon API Gateway

为 API Gateway 中的 HTTP API 配置日志记录

您可以开启日志记录以将日志写入 CloudWatch Logs。您可以使用日志记录变量来自定义日志的内容。

要为 HTTP API 开启日志记录,您必须执行以下操作。

  1. 确保您的用户具有激活日志记录所需的权限。

  2. 创建 CloudWatch Logs 日志组。

  3. 为 API 的某个阶段提供 CloudWatch Logs 日志组的 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 Logs 用户指南》中的“创建日志组”

  2. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  3. 选择 HTTP API。

  4. 在主导航面板的 Monitor(监控)选项卡下,选择 Logging(日志记录)。

  5. 选择要激活日志记录的阶段,然后选择 Select(选择)。

  6. 选择 Edit(编辑)以激活访问日志。

  7. 开启 Access logging(访问日志),进入 CloudWatch Logs,然后选择日志格式。

  8. 选择保存

AWS CLI

以下 AWS CLI 命令创建日志组。

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

您需要日志组的 Amazon 资源名称(ARN)才能开启日志记录。ARN 格式为 arn:aws:logs:region:account-id:log-group: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