配置 HTTP API 的日志记录 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

配置 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 的日志记录

您可以使用 Amazon Web Services Management Console 或 Amazon CLI 创建日志组并激活访问日志记录。

Amazon Web Services 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. 选择保存

Amazon CLI

以下 Amazon 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

以下 Amazon 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