CloudWatch Logs Insights로 로그 쿼리
CloudWatch Logs Insights를 사용하면 서버 액세스 로그 데이터를 대화식으로 검색해 분석할 수 있습니다. 쿼리는 로그가 전송되는 로그 그룹에 대해 실행되며 몇 초 만에 결과를 반환합니다.
참고
Amazon S3 범용 버킷으로 전송된 로그를 쿼리하려면 Amazon Athena를 사용하여 요청에 대한 액세스 로그 쿼리 섹션을 참조하세요. SQL을 사용하여 S3 Tables 미러를 쿼리하려면 S3 Tables에서 액세스 로그 쿼리 섹션을 참조하세요.
시작하기
-
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
탐색 창에서 Logs를 선택한 다음, Logs Insights를 선택합니다.
-
로그 그룹 선택기에서 서버 액세스 로그 그룹을 선택합니다.
-
쿼리의 시간 범위를 선택합니다.
-
쿼리를 입력하고 Run query를 선택합니다.
트래픽 분석
다음 쿼리는 요청 볼륨 및 트래픽 패턴을 이해하는 데 도움이 됩니다.
예시간 경과에 따른 요청 볼륨
stats count(*) as requests by bin(5m) as interval | sort interval asc
예작업 유형별 요청 혼합
stats count(*) as cnt by operation | sort cnt desc
예버킷별 트래픽
stats count(*) as requests, sum(bytes_sent_size) as bytes_out by bucket_arn | sort requests desc
오류 해결
다음 쿼리는 오류를 식별하고 진단하는 데 도움이 됩니다.
예오류율 분석
filter http_status >= 400 | stats count(*) as error_count by http_status, error_code, operation | sort error_count desc
예 403 액세스 거부 요청
filter http_status = 403 | stats count(*) as denied_count by key_name, remote_ip, requester | sort denied_count desc
예 404 요청을 찾을 수 없음
filter http_status = 404 | stats count(*) as miss_count by key_name, error_code, remote_ip | sort miss_count desc
예 503 속도 저하(스로틀링) 이벤트
filter http_status = 503 | stats count(*) as throttle_count by key_name, remote_ip | sort throttle_count desc
액세스 패턴
다음 쿼리는 데이터에 액세스하는 사람과 방법을 이해하는 데 도움이 됩니다.
예소스 IP별 트래픽
stats count(*) as total_requests, sum(http_status >= 400) as errors, sum(bytes_sent_size) as bytes_transferred by remote_ip | sort total_requests desc
예요청자별 작업
stats count(*) as requests by requester, operation | sort requests desc
예가장 많이 액세스한 키
filter operation like /REST\.(GET|PUT)\.OBJECT/ | stats count(*) as access_count, sum(bytes_sent_size) as bytes_out by key_name | sort access_count desc | limit 10
지연 시간 분석
다음 쿼리는 느린 요청 및 지연 시간 추세를 식별하는 데 도움이 됩니다.
예작업 유형별 지연 시간
filter operation like /REST\.(GET|PUT)\.OBJECT/ | stats avg(total_duration) as avg_ms, pct(total_duration, 50) as p50_ms, pct(total_duration, 95) as p95_ms, max(total_duration) as max_ms, count(*) as requests by operation
예 p95 지연 시간 기준으로 가장 느린 키
filter operation like /REST\.GET\.OBJECT/ | stats avg(total_duration) as avg_ms, pct(total_duration, 95) as p95_ms, count(*) as requests by key_name | sort p95_ms desc | limit 10
예시간 경과에 따른 지연 시간
filter operation like /REST\.(GET|PUT)\.OBJECT/ | stats avg(total_duration) as avg_ms, pct(total_duration, 95) as p95_ms by bin(5m) as interval | sort interval asc
비용 분담
다음 쿼리는 데이터 전송을 이해하고 비용 발생 요인을 파악하는 데 도움이 됩니다.
예작업별 데이터 전송
filter operation like /REST\.(GET|PUT|DELETE)\.OBJECT/ | stats sum(bytes_sent_size) as total_bytes_out, sum(object_size) as total_object_bytes, count(*) as request_count by operation | sort total_bytes_out desc
예제공되는 가장 큰 객체
filter operation like /REST\.GET\.OBJECT/ and bytes_sent_size > 0 | stats max(object_size) as max_size, avg(object_size) as avg_size, count(*) as reads by key_name | sort max_size desc | limit 10
보안 분석
다음 쿼리는 의심스러운 액세스 패턴을 감지하는 데 도움이 됩니다.
예오류율이 높은 IP
stats count(*) as total, sum(http_status >= 400) as errors by remote_ip | filter errors > 10 | sort errors desc
예키별 액세스 시도 실패
filter http_status >= 400 | stats count(*) as attempts by remote_ip, key_name, operation, http_status | sort attempts desc | limit 20
예 TLS 버전 배포
stats count(*) as cnt by tls_version | sort cnt desc