stats - 아마존 CloudWatch 로그

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

stats

stats를 사용하여 막대형 차트, 꺾은선형 차트, 누적 영역 차트와 같은 로그 데이터의 시각화를 생성합니다. 이렇게 하면 로그 데이터에서 패턴을 더 효율적으로 식별할 수 있습니다. CloudWatch Logs Insights는 해당 stats 함수와 하나 이상의 집계 함수를 사용하는 쿼리에 대한 시각화를 생성합니다.

예를 들어, Route 53 로그 그룹의 다음 쿼리는 시간당 Route 53 레코드의 분포를 쿼리 유형별로 보여주는 시각화를 반환합니다.

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

이러한 쿼리는 모두 막대 차트를 생성할 수 있습니다. 쿼리가 bin() 함수를 사용하여 필드별로 데이터를 그룹화하는 경우 선형 차트 및 누적 영역 차트도 볼 수 있습니다.

bin 함수에서는 다음과 같은 시간 단위 및 약어가 지원됩니다. 둘 이상의 문자를 포함하는 모든 단위 및 약어의 경우 s를 추가하여 복수화할 수 있습니다. 따라서 hrhrs 모두 시간을 지정하는 데 사용됩니다.

  • millisecond ms msec

  • second s sec

  • minute m min

  • hour h hr

  • day d

  • week w

  • month mo mon

  • quarter q qtr

  • year y yr

시계열 데이터 시각화

시계열 시각화는 다음과 같은 특성을 가진 쿼리에 사용할 수 있습니다.

  • 쿼리에 집계 함수가 하나 이상 포함되어 있습니다. 자세한 정보는 Aggregation Functions in the Stats Command 섹션을 참조하세요.

  • 쿼리가 bin() 함수를 사용하여 필드 하나를 기준으로 데이터를 그룹화합니다.

이러한 쿼리는 선형 차트, 누적 영역 차트, 막대 차트 및 파이 차트를 생성할 수 있습니다.

예제

전체 자습서는 자습서: 시계열 시각화를 생성하는 쿼리 실행 섹션을 참조하세요.

다음은 시계열 시각화에 사용할 수 있는 쿼리 예제입니다.

다음 쿼리는 5분마다 생성된 데이터 포인트와 함께 myfield1 필드의 평균 값에 대한 시각화를 생성합니다. 각 데이터 포인트는 이전 5분 동안 생성된 로그의 myfield1 값 평균을 집계한 것입니다.

stats avg(myfield1) by bin(5m)

다음 쿼리는 5분마다 생성된 데이터 포인트와 함께 여러 필드를 기준으로 세 값의 시각화를 생성합니다. 쿼리가 집계 함수를 포함하고 있고 그룹화 필드로 bin()을 사용하기 때문에 시각화가 생성됩니다.

stats avg(myfield1), min(myfield2), max(myfield3) by bin(5m)

선형 차트 및 누적 영역 차트 제한 사항

로그 항목 정보를 집계하지만 bin() 함수를 사용하지 않는 쿼리는 막대 차트를 생성할 수 있습니다. 그러나 이러한 쿼리는 선형 차트 또는 누적 영역 차트를 생성할 수 없습니다. 이러한 쿼리 유형에 대한 자세한 내용은 필드별로 그룹화된 로그 데이터 시각화 섹션을 참조하세요.

필드별로 그룹화된 로그 데이터 시각화

stats 함수와 하나 이상의 집계 함수를 사용하는 쿼리에 대해 막대 차트를 생성할 수 있습니다. 자세한 정보는 Aggregation Functions in the Stats Command 섹션을 참조하세요.

시각화를 보려면 쿼리를 실행합니다. 그런 다음 Visualization(시각화) 탭을 선택하고 Line(선형) 옆의 화살표를 선택한 다음 Bar(막대)를 선택합니다. 막대 차트에서는 시각화가 최대 100개 막대로 제한됩니다.

예제

전체 자습서는 자습서: 로그 필드로 그룹화된 시각화를 생성하는 쿼리 실행 섹션을 참조하세요. 다음 단락에는 필드별 시각화에 대한 더 많은 예제 쿼리가 포함되어 있습니다.

다음 VPC 흐름 로그 쿼리는 각 대상 주소에 대해 세션당 전송된 평균 바이트 수를 찾습니다.

stats avg(bytes) by dstAddr

각 결과 값에 대해 둘 이상의 막대가 포함된 차트를 생성할 수도 있습니다. 예를 들어 다음 VPC 흐름 로그 쿼리는 각 대상 주소에 대해 세션당 전송된 평균 및 최대 바이트 수를 찾습니다.

stats avg(bytes), max(bytes) by dstAddr

다음 쿼리는 쿼리 유형에 대해 Amazon Route 53 쿼리 로그 수를 찾습니다.

stats count(*) by queryType

단일 쿼리에서 여러 통계 명령 사용

단일 쿼리에 최대 두 개의 stats 명령을 사용할 수 있습니다. 이렇게 하면 첫 번째 집계의 출력에 대해 추가 집계를 수행할 수 있습니다.

예: 두 개의 stats 명령을 사용한 쿼리

예를 들어, 다음 쿼리는 먼저 5분 빈(bin)의 총 트래픽 볼륨을 찾아낸 다음 해당 5분 빈 중 최고, 최저, 평균 트래픽 볼륨을 계산합니다.

FIELDS strlen(@message) AS message_length | STATS sum(message_length)/1024/1024 as logs_mb BY bin(5m) | STATS max(logs_mb) AS peak_ingest_mb, min(logs_mb) AS min_ingest_mb, avg(logs_mb) AS avg_ingest_mb

예: 여러 통계 명령어를 다른 함수(filter, fields, bin)와 결합

단일 쿼리에서 두 개의 stats 명령을 다른 명령(filterfields)과 결합할 수 있습니다. 예를 들어 다음 쿼리는 세션에서 고유한 IP 주소 수를 찾고 클라이언트 플랫폼별로 세션 수를 찾아내고, 해당 IP 주소를 필터링한 다음, 마지막으로 클라이언트 플랫폼별 평균 세션 요청을 찾아냅니다.

STATS count_distinct(client_ip) AS session_ips, count(*) AS requests BY session_id, client_platform | FILTER session_ips > 1 | STATS count(*) AS multiple_ip_sessions, sum(requests) / count(*) AS avg_session_requests BY client_platform

여러 stats 명령을 사용하여 쿼리에서 bindateceil 함수를 사용할 수 있습니다. 예를 들어 다음 쿼리는 먼저 메시지를 5분 블록으로 결합한 다음 5분 블록을 10분 블록으로 집계하고 각 10분 블록 내의 최고, 최저 및 평균 트래픽 볼륨을 계산합니다.

FIELDS strlen(@message) AS message_length | STATS sum(message_length) / 1024 / 1024 AS logs_mb BY BIN(5m) as @t | STATS max(logs_mb) AS peak_ingest_mb, min(logs_mb) AS min_ingest_mb, avg(logs_mb) AS avg_ingest_mb BY dateceil(@t, 10m)

참고 및 제한 사항

쿼리당 최대 두 개의 stats 명령을 사용할 수 있습니다. 이 할당량은 변경할 수 없습니다.

sort 또는 limit 명령을 사용하는 경우 이 명령은 두 번째 stats 명령 뒤에 나타나야 합니다. 두 번째 stats 명령 앞에 있는 경우 쿼리는 유효하지 않습니다.

쿼리에 두 개의 stats 명령이 있는 경우 첫 번째 stats 집계가 완료될 때까지 쿼리의 일부 결과가 표시되지 않습니다.

단일 쿼리의 두 번째 stats 명령에서는 첫 번째 stats 명령에 정의된 필드만 참조할 수 있습니다. 예를 들어 첫 번째 stats 집계 후에는 @message 필드를 사용할 수 없으므로 다음 쿼리는 유효하지 않습니다.

FIELDS @message | STATS SUM(Fault) by Operation # You can only reference `SUM(Fault)` or Operation at this point | STATS MAX(strlen(@message)) AS MaxMessageSize # Invalid reference to @message

첫 번째 stats 명령 이후에 참조하는 모든 필드는 첫 번째 stats 명령에서 정의해야 합니다.

STATS sum(x) as sum_x by y, z | STATS max(sum_x) as max_x by z # You can only reference `max(sum_x)`, max_x or z at this point
중요

bin 함수는 항상 @timestamp 필드를 묵시적으로 사용합니다. 즉, 첫 번째 stats 명령을 사용하여 timestamp 필드를 전파하지 않으면 두 번째 stats 명령에서 bin 함수를 사용할 수 없습니다. 예를 들어 다음 쿼리는 유효하지 않습니다.

FIELDS strlen(@message) AS message_length | STATS sum(message_length) AS ingested_bytes BY @logStream | STATS avg(ingested_bytes) BY bin(5m) # Invalid reference to @timestamp field

대신 첫 번째 stats 명령에서 @timestamp 필드를 정의하면 다음 예제와 같이 두 번째 stats 명령에서 dateceil과 함께 필드를 사용할 수 있습니다.

FIELDS strlen(@message) AS message_length | STATS sum(message_length) AS ingested_bytes, max(@timestamp) as @t BY @logStream | STATS avg(ingested_bytes) BY dateceil(@t, 5m)

stats와 함께 사용할 함수

CloudWatch Logs Insights는 통계 집계 함수와 통계 비집계 함수를 모두 지원합니다.

statsaggregation 함수를 stats 명령에서 사용하고 다른 함수의 인수로 사용합니다.

함수 결과 유형 설명

avg(fieldName: NumericLogField)

number

지정된 필드의 값 평균입니다.

count()

count(fieldName: LogField)

number

로그 이벤트를 계산합니다. count()(또는count(*))는 쿼리에서 반환하는 이벤트 수를 모두 세고 count(fieldName)은 지정한 필드 이름이 포함된 레코드 수를 모두 계산합니다.

count_distinct(fieldName: LogField)

number

필드에 대해 고유한 값의 개수를 반환합니다. 필드의 카디널리티가 매우 높은 경우(고유한 값이 많이 포함되어 있음) 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)

number

지정된 필드의 값에 대한 표준 편차입니다.

sum(fieldName: NumericLogField)

number

지정된 필드의 값 합계입니다.

통계 비집계 함수

비집계 함수를 stats 명령에서 사용하고 다른 함수의 인수로 사용합니다.

함수 결과 유형 설명

earliest(fieldName: LogField)

LogField

쿼리된 로그에서 가장 이른 타임스탬프가 있는 로그 이벤트에서 fieldName의 값을 반환합니다.

latest(fieldName: LogField)

LogField

쿼리된 로그에서 최신 타임스탬프가 있는 로그 이벤트에서 fieldName의 값을 반환합니다.

sortsFirst(fieldName: LogField)

LogField

쿼리된 로그에서 가장 빨리 정렬된 fieldName의 값을 반환합니다.

sortsLast(fieldName: LogField)

LogField

쿼리된 로그에서 가장 늦게 정렬된 fieldName의 값을 반환합니다.