Configurar registro em log para APIs HTTP no API Gateway - Amazon API Gateway

Configurar registro em log para APIs HTTP no API Gateway

É possível ativar o registro em log para gravar logs no CloudWatch Logs. Você pode usar variáveis de registro em log para personalizar o conteúdo de seus logs.

Para ativar o registro em log para uma API HTTP, é necessário fazer o seguinte.

  1. Seu usuário deve ter as permissões necessárias para ativar o registro em log.

  2. Crie um grupo de logs do CloudWatch Logs.

  3. Forneça o ARN do grupo de logs do CloudWatch Logs para um estágio de sua API.

Permissões para ativar o registro em log

Para ativar o registro em log para uma API, seu usuário deve ter as permissões a seguir.

{ "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": "*" } ] }

Criar um grupo de logs e ativar o registro em log para APIs HTTP

É possível criar um grupo de logs e ativar o registro em log de acesso usando o AWS Management Console ou a AWS CLI.

AWS Management Console
  1. Criar um grupo de logs do

    Para saber como criar um grupo de logs usando o console, consulte Criar um grupo de logs no Guia do usuário do Amazon CloudWatch Logs.

  2. Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway.

  3. Selecione uma API HTTP.

  4. Na guia Monitor no painel de navegação principal, selecione Logging (Registro em log).

  5. Selecione um estágio para ativar o registro em log e Select (Selecionar).

  6. Selecione Edit (Editar) para ativar o registro em log de acesso.

  7. Ative Access logging (Registro em log de acesso), insira um CloudWatch Logs e selecione um formato de log.

  8. Escolha Salvar.

AWS CLI

O comando da AWS CLI a seguir cria um grupo de logs.

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

Você precisa do nome do recurso da Amazon (ARN) do seu grupo de logs para ativar o registro em log. O formato do ARN é arn:aws:logs:region:account-id:log-group:log-group-name.

O comando da AWS CLI a seguir ativa o registro em log para o estágio $default de uma API HTTP.

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"}'

Formatos de log demonstrativos

Alguns formatos demonstrativos de log de acesso usados com frequência estão disponíveis no console do API Gateway e são listados a seguir.

  • CLF (Formato de log comum):

    $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 (valores separados por vírgula):

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