[AWS] CloudWatch Loginsight Query 사용법
안녕하세요~? 할배즈..입니다.
오늘은 CloudWatch의 Loginsight Query 기본 사용법에 대해 알아보겠습니다.
Amazon CloudWatch Logs를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, AWS CloudTrail, Route 53 및 다른 원본에서 시스템, 애플리케이션 및 사용자 지정 로그 파일을 모니터링, 저장 및 액세스할 수 있습니다.
CloudWatch Logs Insights를 사용하여 로그 데이터를 대화식으로 검색하고 분석할 수 있습니다. 운영상의 문제에 보다 효율적이고 효과적으로 대처할 수 있도록 쿼리를 수행할 수 있습니다. CloudWatch Logs Insights에는 몇 가지 간단하지만 강력한 명령과 함께 특별히 구축된 쿼리 언어가 포함되어 있습니다.

Cloud Watch Loginsight Query는 |(파이프라인)으로 구분됩니다.
- fields – 하나 이상의 로그 필드를 검색. (abs, sqrt, strlen, trim 등의 기능도 활용할 수 있다.)
- display – 쿼리 결과에 표시할 필드를 지정.
- filter – Boolean 연산자, 비교 연산자 및 정규 표현식에서 구축된 하나 이상의 조건을 기반으로 로그 필드를 검색.
- stats – 특정 시간 간격동안 로그 필드의 합계, 평균, 카운트, 최소, 최대값 및 백분위수와 같은 집계 통계량을 계산.
- sort – 로그 이벤트를 오름차순 또는 내림차순으로 정렬.
- limit – 쿼리가 반환하는 로그 이벤트 수 제한.
- parse – 로그 필드에서 데이터를 추출하여 쿼리에 의해 추가로 처리될 수 있는 하나 이상의 ephemeral 필드를 생성.
기본 문법
1. fields
fields를 사용하여 쿼리 결과에 특정 필드를 표시할 수 있습니다.
함수와 연산을 통해 필드를 수정하거나, 새로운 필드를 생성할 수 있습니다.
fields @timestamp, @message | sort @timestamp desc | limit 20
2. filter
filter 명령을 사용하여 하나 이상의 조건과 일치하는 로그 이벤트를 가져올 수 있습니다.
fields @timestamp, @message
| filter (range>3000)
| sort @timestamp desc
| limit 20
f1에 Exception 이 포함된 모든 이벤트를 반환하는 3가지 쿼리 (모두 대/소문자 구별)
* fields f1, f2, f3 | filter f1 like /Exception/
* fields f1, f2, f3 | filter f1 =~ /Exception/
* fields f1, f2, f3 | filter f1 like "Exception" (부문 문자열 일치)
대/ 소문자 구분하지 않는 쿼리
fields f1, f2, f3 | filter f1 like /(?i)Exception/
f1에 정확하게 단어 Exception이 포함된 모든 이벤트 반환 (대/소문자 구분하지 않음)
fields f1, f2, f3 | filter f1 =~ /^(?i)Exception$/
range에 대한 값이 3000보다 큰 모든 로그 이벤트를 반환하는 쿼리의 예를 보여줍니다. 쿼리는 결과를 20개의 로그 이벤트로 제한하고 로그 이벤트를 내림차순의 @timestamp로 정렬합니다.
3. stats
stats를 사용하여 로그 필드 값의 집계 통계를 계산할 수 있습니다.
- f1필드의 평균을 "myAvgF1"으로 별칭을 사용하고 내림차순 정렬
stats avg(f1) as myAvgF1 | sort myAvgF1 desc
4. sort
sort를 사용하여 로그 이벤트를 오름차순(asc) 또는 내림차순(desc)으로 표시할 수 있습니다.
- f1 필드를 기준으로 desc 정렬
Fileds f1, f2, f3
| sort f1 desc
5. limit
limit을 사용하여 쿼리에서 반환할 로그 이벤트 수를 지정할 수 있습니다.
지원되는 연산 및 함수
산술 연산자
a + b | 덧셈 |
a - b | 뺄셈 |
a * b | 곱셈 |
a / b | 나눗셈 |
a ^ b | 거듭제곱(2 ^ 3에서 8 반환) |
a % b | 나머지 또는 모듈러스(10 % 3에서 1 반환) |
boolean 연산자
and, or 및 not
비교 연산자
= | 같음 |
!= | 같지 않음 |
< | 미만 |
> | 초과 |
<= | 작거나 같음 |
>= | 크거나 같음 |
통계 집계 함수
avg(fieldName: NumericLogField) | 숫자 | 지정된 필드의 값 평균입니다. |
count() count(fieldName: LogField) |
숫자 | 로그 이벤트를 계산합니다. count()(또는count(*))는 쿼리에서 반환하는 이벤트 수를 모두 세고 count(fieldName)은 지정한 필드 이름이 포함된 레코드 수를 모두 계산합니다. |
count_distinct(fieldName: LogField) | 숫자 | 필드에 대해 고유한 값의 개수를 반환합니다. 필드의 카디널리티가 매우 높은 경우(고유한 값이 많이 포함되어 있음) count_distinct가 반환하는 값은 근사치입니다. |
max(fieldName: LogField) | LogFieldValue | 쿼리된 로그에서 이 로그 필드에 대한 최댓값입니다. |
min(fieldName: LogField) | LogFieldValue | 쿼리된 로그에서 이 로그 필드에 대한 최솟값입니다. |
pct(fieldName: LogFieldValue, percent: number) | LogFieldValue | 백분위수는 데이터 세트에서 값의 상대적 위치를 나타냅니다. 예를 들어, pct(@duration, 95)는 @duration의 값 중 95퍼센트가 이 값보다 낮고 5퍼센트는 이 값보다 큰 @duration 값을 반환합니다. |
stddev(fieldName: NumericLogField) | 숫자 | 지정된 필드의 값에 대한 표준 편차입니다. |
sum(fieldName: NumericLogField) | 숫자 | 지정된 필드의 값 합계입니다. |
지원되는 연산 및 함수는 더 다양하게 있지만 자주 사용하는 항목 위주로 정리하였습니다.
더 자세하게 알고 싶으면
https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html
Amazon CloudWatch Logs란 무엇인가요? - Amazon CloudWatch Logs
Amazon CloudWatch Logs란 무엇인가요? Amazon CloudWatch Logs를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, AWS CloudTrail, Route 53 및 다른 원본에서 시스템, 애플리케이션 및 사용자 지정 로그 파일을
docs.aws.amazon.com
공식 문서를 참조해 주세요~!
이상 할배즈..였습니다~!
