샘플 쿼리 - Amazon CloudWatch Logs

샘플 쿼리

이 섹션에는 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/

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)

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

Route 53 로그에 대한 쿼리

다음은 시간당 레코드 배포를 쿼리 유형별로 찾습니다.

stats count(*) by queryType, bin(1h)

다음은 요청 수가 가장 많은 10 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 region="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

분석 명령의 예제

glob 표현식을 사용하여 로그 필드 @user에서 임시 필드 @method, @latency@message를 추출하고 @method@user의 고유한 개별 조합에 대한 평균 지연 시간을 반환합니다.

parse @message "user=*, method:*, latency := *" as @user, @method, @latency | stats avg(@latency) by @method, @user

정규식을 사용하여 로그 필드 @user2에서 임시 필드 @method2, @latency2@message를 추출하고 @method2@user2의 고유한 개별 조합에 대한 평균 지연 시간을 반환합니다.

parse @message /user=(?<user2>.*?), method:(?<method2>.*?), latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, @user2

휘발성 필드인 loggingTime, loggingTypeloggingMessage 필드를 추출하고 ERROR 또는 INFO 문자열이 포함된 이벤트를 기록하도록 필터링한 다음 loggingMessage 문자열이 포함된 이벤트에 대해 loggingTypeERROR 필드만 표시합니다.

FIELDS @message | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage | FILTER loggingType IN ["ERROR", "INFO"] | DISPLAY loggingMessage, loggingType = "ERROR" as isError