API Gateway에서 REST API에 대한 CloudWatch 로깅 설정 - Amazon API Gateway

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

API Gateway에서 REST API에 대한 CloudWatch 로깅 설정

요청 실행 또는 API에 대한 클라이언트 액세스와 관련된 문제의 디버깅을 위해 Amazon CloudWatch Logs을 활성화해 API 호출을 로깅할 수 있습니다. For more information about CloudWatch, see Amazon CloudWatch 지표를 사용한 REST API 실행 모니터링.

API Gateway에 대한 CloudWatch 로그 형식

CloudWatch의 API 로깅에는 실행 로깅과 액세스 로깅의 두 가지 유형이 있습니다. 실행 로깅에서는 API Gateway가 CloudWatch Logs을 관리합니다. 이 프로세스에는 로그 그룹 및 로그 스트림을 생성하는 작업과 호출자의 요청 및 응답을 로그 스트림에 보고하는 작업이 포함됩니다.

로깅된 데이터에는 오류 또는 실행 트레이스(예: 요청 또는 응답 파라미터 값 또는 페이로드), Lambda 권한 부여자(이전에는 사용자 지정 권한 부여자라고 함)가 사용하는 데이터, API 키가 필요한지 여부, 사용량 계획이 활성화되었는지 여부 등등이 포함됩니다.

API를 배포하면 API Gateway는 로그 그룹과 로그 그룹 아래 로그 스트림을 생성합니다. 로그 그룹은 API-Gateway-Execution-Logs_{rest-api-id}/{stage_name} 형식에 따라 명명됩니다. 로그는 각 로그 그룹 내에서 로그 스트림으로 다시 나뉘며, 로그 스트림은 로깅된 데이터가 보고될 때 마지막 이벤트 시간 기준으로 정렬됩니다.

액세스 로깅에서 API 개발자가 원하는 것은 누가 API에 액세스했고 호출자가 API에 어떻게 액세스했는지 로깅하는 것입니다. 자체 로그 그룹을 생성하거나 API Gateway에서 관리할 수 있는 기존 로그 그룹을 선택할 수 있습니다. 액세스 세부 정보를 지정하려면 $context 변수(선택한 형식으로 표현)를 선택하고 로그 그룹을 대상으로 선택합니다. 각 로그의 고유성을 보존하기 위해 액세스 로그 형식에는 $context.requestId가 포함되어야 합니다.

참고

$context 변수만 지원되며 $input 등은 지원되지 않습니다.

Common Log Format(CLF), JSON, XML 또는 CSV 같은 분석 백엔드도 채택하는 로그 형식을 선택하십시오. 그러면 액세스 로그를 분석 백엔드에 직접 피드하여 지표를 계산하고 렌더링할 수 있습니다. 로그 형식을 정의하려면 로그 그룹 ARN을 액세스 로그 설정/운명 속성 단계. ARN 열이 표시되도록 선택된 경우, CloudWatch 콘솔에서 로그 그룹 ARN을 얻을 수 있습니다. 액세스 로그 형식을 정의하려면 액세스 설정/형식 속성 단계.

일반적으로 사용되는 몇 가지 액세스 로그 형식의 예제가 API Gateway 콘솔에 표시되며 다음과 같이 나열됩니다.

  • CLF(Common Log Format):

    $context.identity.sourceIp $context.identity.caller \ $context.identity.user [$context.requestTime] \ "$context.httpMethod $context.resourcePath $context.protocol" \ $context.status $context.responseLength $context.requestId

    연속 문자(\)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(\n)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.

  • JSON:

    { "requestId":"$context.requestId", \ "ip": "$context.identity.sourceIp", \ "caller":"$context.identity.caller", \ "user":"$context.identity.user", \ "requestTime":"$context.requestTime", \ "httpMethod":"$context.httpMethod", \ "resourcePath":"$context.resourcePath", \ "status":"$context.status", \ "protocol":"$context.protocol", \ "responseLength":"$context.responseLength" \ }

    연속 문자(\)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(\n)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.

  • XML:

    <request id="$context.requestId"> \ <ip>$context.identity.sourceIp</ip> \ <caller>$context.identity.caller</caller> \ <user>$context.identity.user</user> \ <requestTime>$context.requestTime</requestTime> \ <httpMethod>$context.httpMethod</httpMethod> \ <resourcePath>$context.resourcePath</resourcePath> \ <status>$context.status</status> \ <protocol>$context.protocol</protocol> \ <responseLength>$context.responseLength</responseLength> \ </request>

    연속 문자(\)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(\n)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.

  • CSV(쉼표로 분리된 값):

    $context.identity.sourceIp,$context.identity.caller,\ $context.identity.user,$context.requestTime,$context.httpMethod,\ $context.resourcePath,$context.protocol,$context.status,\ $context.responseLength,$context.requestId

    연속 문자(\)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(\n)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.

CloudWatch 로깅에 대한 권한

CloudWatch Logs을 활성화하려면 계정의 CloudWatch에 로그를 읽고 쓸 수 있는 적절한 권한을 API Gateway에 부여해야 합니다. AmazonAPIGatewayPushToCloudWatchLogs 관리형 정책(ARN이 arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs)에는 필요한 모든 권한이 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "*" } ] }
참고

API Gateway은 IAM 역할을 가정하기 위해 AWS Security Token Service을 호출하게 되므로 AWS STS가 해당 리전에 대해 활성화되어 있는지 확인하십시오. 자세한 내용은 Managing AWS STS in an AWS Region(AWS 리전의 AWS STS 관리)를 참조하십시오.

계정에 이러한 권한을 부여하려면 IAM 역할 apigateway.amazonaws.com 신뢰할 수 있는 법인으로서 이전 정책을 IAM 역할을 IAM 역할 ARN cloudwatchrolearn 귀하의 계정. CloudWatch Logs를 사용하도록 설정하고 싶은 각 AWS 리전에 대해 CloudWatchroLearn 속성을 별도로 설정해야 합니다.

IAM 역할 ARN을 설정할 때 오류가 발생하는 경우, AWS Security Token Service 계정 설정을 확인하여 사용 중인 리전에 AWS STS이 활성화되어 있는지 확인합니다. 활성화에 대한 자세한 내용은 AWS STS, 참조: AWS 지역에서 AWS STS 관리 in the IAM 사용 설명서.

API Gateway 콘솔을 사용하여 CloudWatch API 로깅 설정

CloudWatch API 로깅을 설정하려면 API를 단계에 배포해야 합니다. 계정에 적절한 CloudWatch Logs 역할 ARN도 구성된 상태여야 합니다.

  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. REST API를 선택합니다.

  3. 기본 탐색 창에서 설정을 선택하고 CloudWatch log role ARN(CloudWatch 로그 역할 ARN)에 적절한 권한이 포함된 IAM 역할의 ARN을 입력합니다. 이 작업은 한 번만 하면 됩니다.

  4. 다음 중 하나를 수행합니다.

    1. 기존 API를 선택한 다음 단계를 선택합니다.

    2. API를 생성하여 단계에 배포합니다.

  5. 선택 로그/추적 in the 스테이지 편집기.

  6. 실행 로깅을 활성화하려면 다음과 같이 합니다.

    1. 선택 CloudWatch 로그 사용 아래 CloudWatch Settings.

    2. 드롭다운 메뉴에서 오류 또는 정보를 선택합니다.

    3. 원하는 경우, 전체 요청/응답 데이터 기록 전체 API 요청 및 응답을 기록합니다.

      주의

      이는 API를 해결하는 데 유용할 수 있지만 민감한 데이터를 로깅할 수 있습니다. 사용하지 않는 것이 좋습니다. Log full requests/responses data 생산 청구.

    4. 원하는 경우, CloudWatch 세부 지표 활성화(Enable Detailed CloudWatch Metrics)를 선택합니다.

    CloudWatch 지표에 대한 자세한 정보는 Amazon CloudWatch 지표를 사용한 REST API 실행 모니터링 단원을 참조하십시오.

  7. 액세스 로깅을 활성화하려면()

    1. 선택 액세스 로깅 활성화 아래 사용자 지정 액세스 로깅.

    2. Access Log Destination ARN(액세스 로그 대상 ARN)에 로그 그룹의 ARN을 입력합니다. ARN 형식은 arn:aws:logs:{region}:{account-id}:log-group:log-group-name입니다.

    3. Log Format(로그 형식)에 로그 형식을 입력합니다. CLF, JSON, XML 또는 CSV를 선택하여 제공된 예 중 하나를 지침으로 사용할 수 있습니다.

  8. 변경 사항 저장을 선택합니다.

참고

실행 로깅과 액세스 로깅을 서로 독립적으로 활성화할 수 있습니다.

이제 API Gateway가 API에 대한 요청을 로깅할 준비가 되었습니다. 단계 설정, 로그 또는 단계 변수를 업데이트할 때 API를 다시 배포할 필요가 없습니다.