HTTP API의 로깅 구성 - Amazon 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. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  3. HTTP API를 선택합니다.

  4. 기본 탐색 패널의 Monitor(모니터링) 탭에서 Logging(로깅) 선택합니다.

  5. 로깅을 활성화할 단계를 선택하고 Select(선택)를 선택합니다.

  6. Edit(편집)을 선택하여 액세스 로깅을 활성화합니다.

  7. Access logging(액세스 로깅)을 활성화하고 CloudWatch Logs를 입력한 다음 로그 형식을 선택합니다.

  8. Save(저장)를 선택합니다.

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(Common Log Format):

    $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