샘플 쿼리
이 섹션에는 CloudWatch 콘솔
쿼리 구문에 대한 자세한 내용은 CloudWatch Logs Insights 언어 쿼리 구문을 참조하세요.
주제
일반 쿼리
최근에 추가된 로그 이벤트 25개를 찾습니다.
fields @timestamp, @message | sort @timestamp desc | limit 25
시간당 발생한 예외 횟수 목록을 가져옵니다.
filter @message like /Exception/ | stats count(*) as exceptionCount by bin(1h) | sort exceptionCount desc
예외에 해당되지 않는 로그 이벤트 목록을 가져옵니다.
fields @message | filter @message not like /Exception/
server 필드의 각 고유 값에 대한 최신 로그 이벤트를 가져옵니다.
fields @timestamp, server, severity, message | sort @timestamp asc | dedup server
각 severity 유형에 대한 server 필드의 각 고유 값에 대한 최신 로그 이벤트를 가져옵니다.
fields @timestamp, server, severity, message | sort @timestamp desc | dedup server, severity
Lambda 로그에 대한 쿼리
과다 프로비저닝된 메모리의 양을 확인합니다.
filter @type = "REPORT" | stats max(@memorySize / 1000 / 1000) as provisonedMemoryMB, min(@maxMemoryUsed / 1000 / 1000) as smallestMemoryRequestMB, avg(@maxMemoryUsed / 1000 / 1000) as avgMemoryUsedMB, max(@maxMemoryUsed / 1000 / 1000) as maxMemoryUsedMB, provisonedMemoryMB - maxMemoryUsedMB as overProvisionedMB
지연 보고서를 생성합니다.
filter @type = "REPORT" | stats avg(@duration), max(@duration), min(@duration) by bin(5m)
느린 함수 간접 호출을 검색하고 재시도 또는 클라이언트측 코드에서 발생할 수 있는 중복 요청을 제거합니다. 이 쿼리에서 @duration은 밀리초 단위입니다.
fields @timestamp, @requestId, @message, @logStream | filter @type = "REPORT" and @duration > 1000 | sort @timestamp desc | dedup @requestId | limit 20
Amazon VPC 흐름 로그에 대한 쿼리
호스트 간에 상위 15개의 패킷 전송을 찾습니다.
stats sum(packets) as packetsTransferred by srcAddr, dstAddr | sort packetsTransferred desc | limit 15
지정된 서브넷의 호스트에 대해 상위 15개 바이트 전송을 찾습니다.
filter isIpv4InSubnet(srcAddr, "192.0.2.0/24") | stats sum(bytes) as bytesTransferred by dstAddr | sort bytesTransferred desc | limit 15
데이터 전송 프로토콜로 UDP를 사용하는 IP 주소를 찾습니다.
filter protocol=17 | stats count(*) by srcAddr
캡처 기간 중 흐름 레코드를 건너뛴 IP 주소를 찾습니다.
filter logStatus="SKIPDATA" | stats count(*) by bin(1h) as t | sort t
네트워크 연결 문제 해결에 도움이 되도록 각 연결에 대한 단일 레코드를 찾습니다.
fields @timestamp, srcAddr, dstAddr, srcPort, dstPort, protocol, bytes | filter logStream = 'vpc-flow-logs' and interfaceId = 'eni-0123456789abcdef0' | sort @timestamp desc | dedup srcAddr, dstAddr, srcPort, dstPort, protocol | limit 20
Route 53 로그에 대한 쿼리
시간당 레코드 배포를 쿼리 유형별로 찾습니다.
stats count(*) by queryType, bin(1h)
요청 횟수가 가장 많은 DNS 해석기 10개를 찾습니다.
stats count(*) as numRequests by resolverIp | sort numRequests desc | limit 10
서버가 DNS 요청을 완료하지 못한 도메인 및 하위 도메인별 레코드의 수를 찾습니다.
filter responseCode="SERVFAIL" | stats count(*) by queryName
CloudTrail 로그에 대한 쿼리
각 서비스, 이벤트 유형 및 AWS 리전에 대한 로그 항목의 수를 찾습니다.
stats count(*) by eventSource, eventName, awsRegion
지정된 AWS 리전에서 시작 또는 중지한 Amazon EC2 호스트를 찾습니다.
filter (eventName="StartInstances" or eventName="StopInstances") and awsRegion="us-east-2"
새로 생성된 IAM 사용자의 AWS 리전, 사용자 이름 및 ARN을 찾습니다.
filter eventName="CreateUser" | fields awsRegion, requestParameters.userName, responseElements.user.arn
API UpdateTrail을 간접 호출하는 중 예외가 발생한 레코드의 수를 찾습니다.
filter eventName="UpdateTrail" and ispresent(errorCode) | stats count(*) by errorCode, errorMessage
TLS 1.0 또는 1.1이 사용된 로그 항목을 찾습니다
filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ] | stats count(*) as numOutdatedTlsCalls by userIdentity.accountId, recipientAccountId, eventSource, eventName, awsRegion, tlsDetails.tlsVersion, tlsDetails.cipherSuite, userAgent | sort eventSource, eventName, awsRegion, tlsDetails.tlsVersion
TLS 버전 1.0 또는 1.1을 사용한 서비스당 직접 호출의 수를 찾습니다.
filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ] | stats count(*) as numOutdatedTlsCalls by eventSource | sort numOutdatedTlsCalls desc
Amazon API Gateway에 대한 쿼리
마지막 10개의 4XX 오류 찾기
fields @timestamp, status, ip, path, httpMethod | filter status>=400 and status<=499 | sort @timestamp desc | limit 10
Amazon API Gateway 액세스 로그 그룹에서 가장 오래 실행되는 Amazon API Gateway 요청 10개 식별
fields @timestamp, status, ip, path, httpMethod, responseLatency | sort responseLatency desc | limit 10
Amazon API Gateway 액세스 로그 그룹에서 가장 많이 사용되는 API 경로 목록 반환
stats count(*) as requestCount by path | sort requestCount desc | limit 10
Amazon API Gateway 액세스 로그 그룹에 대한 통합 지연 시간 보고서 생성
filter status=200 | stats avg(integrationLatency), max(integrationLatency), min(integrationLatency) by bin(1m)
NAT 게이트웨이에 대한 쿼리
AWS 청구서에서 정상 비용보다 높은 비용을 발견하는 경우 CloudWatch Logs Insights를 사용하여 가장 많은 트래픽을 소비하는 인스턴스를 찾을 수 있습니다. 다음 쿼리 명령에 대한 자세한 내용은 AWS 프리미엄 지원 페이지에서 How can I find the top contributors to traffic through the NAT gateway in my VPC?
참고
다음 쿼리 명령에서 'x.x.x.x'를 NAT 게이트웨이의 프라이빗 IP로 바꾸고 'y.y'를 VPC CIDR 범위의 처음 두 옥텟으로 바꿉니다.
NAT 게이트웨이를 통해 가장 많은 트래픽을 전송하는 인스턴스를 찾습니다.
filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10
NAT 게이트웨이의 인스턴스에서 송수신되는 트래픽을 확인합니다.
filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.') or (srcAddr like 'xxx.xx.xx.xx' and dstAddr like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10
VPC 인스턴스가 업로드 및 다운로드를 위해 가장 자주 통신하는 인터넷 대상을 결정합니다.
업로드용
filter (srcAddr like 'x.x.x.x' and dstAddr not like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10
다운로드용
filter (dstAddr like 'x.x.x.x' and srcAddr not like 'y.y.') | stats sum(bytes) as bytesTransferred by srcAddr, dstAddr | sort bytesTransferred desc | limit 10
Apache 서버 로그에 대한 쿼리
CloudWatch Logs Insights를 사용하여 Apache 서버 로그를 쿼리할 수 있습니다. 다음 쿼리에 대한 자세한 내용은 AWS 클라우드 운영 및 마이그레이션 블로그에서 CloudWatch Logs Insights를 사용하여 Apache 서버 로그 간소화
가장 관련성이 높은 필드를 찾아서 액세스 로그를 검토하고 애플리케이션의 /admin 경로에서 트래픽을 확인할 수 있습니다.
fields @timestamp, remoteIP, request, status, filename| sort @timestamp desc | filter filename="/var/www/html/admin" | limit 20
상태 코드 '200'(성공)을 사용하여 기본 페이지에 액세스한 고유 GET 요청 수를 찾습니다.
fields @timestamp, remoteIP, method, status | filter status="200" and referrer= http://34.250.27.141/ and method= "GET" | stats count_distinct(remoteIP) as UniqueVisits | limit 10
Apache 서비스가 다시 시작된 횟수를 찾습니다.
fields @timestamp, function, process, message | filter message like "resuming normal operations" | sort @timestamp desc | limit 20
Amazon EventBridge에 대한 쿼리
이벤트 세부 정보 유형별로 그룹화된 EventBridge 이벤트의 수 가져오기
fields @timestamp, @message | stats count(*) as numberOfEvents by `detail-type` | sort numberOfEvents desc
구문 분석 명령의 예제
glob 표현식을 사용하여 로그 필드 @message에서 필드 @user, @method 및 @latency를 추출하고 @method 및 @user의 고유한 개별 조합에 대한 평균 지연 시간을 반환합니다.
parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user
정규식을 사용하여 로그 필드 @message에서 필드 @user2, @method2 및 @latency2를 추출하고 @method2 및 @user2의 고유한 개별 조합에 대한 평균 지연 시간을 반환합니다.
parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2
loggingTime, loggingType 및 loggingMessage 필드를 추출하고 ERROR 또는 INFO 문자열이 포함된 이벤트를 기록하도록 필터링한 다음 ERROR 문자열이 포함된 이벤트에 대해 loggingMessage 및 loggingType 필드만 표시합니다.
FIELDS @message | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage | FILTER loggingType IN ["ERROR", "INFO"] | DISPLAY loggingMessage, loggingType = "ERROR" as isError