Splunk stats와 chart, timechart의 차이에 관하여

Munang·2024년 3월 18일
3

splunk

목록 보기
49/57
post-custom-banner

Splunk를 사용하다보면 일단 거의 집계관련 커맨드는 stats만 사용하게 된다. 이것으로 대부분의 내용 커버가 가능하다. 그래서 사실 이것만 알아도 문제는 없지만, 가끔 아주 간혹 chart 명령어를 사용할 때가 있다.

stats는 시각화를 하게 될 경우 원하지 않는 형태가 나오는 경우가 있는데, 이럴때 주로 chart를 사용해주면 해결된다. 또 timechart도 간혹 사용하게 된다. 물론 stats명령어에 이것 저것 추가하여 charttimechart의 기능을 하게할 수도 있지만, 편리하게 이미 개발된 명령어를 쓰는게 낫다.

아무튼 오늘은 이 3가지의 기능과 사용법과 차이에 대해 알아두고, 어떤 경우에 명령어를 쓰는게 좋은지 알아보도록 하겠다.

1. stats 사용해보기

1) 사용법

아래와 같은 쿼리를 입력하면 다음과 같은 결과가 나온다.

index=botsv1 
| stats c by host, status

이 쿼리를 그대로 해석해보면 host와 status를 하나로 묶어서 row의 개수를 세어줘 가 된다. 따라서 host, status의 각각의 조합에 대한 count 결과가 보인다.

흔히 SQL에서는 이러한 묶는 행위를 group by라고 하고, Splunk에서는 by절을 이용해 group by가 된다.

기본 문법은 다음과 같다.

stats (stats-function(field) [AS field])... [BY field-list]
=> stats 함수 (as 별칭) by 필드

2) stats가 chart, timechart와 다른 것

이따가 chart와 timechart를 설명하면서 더 자세히 알게되겠지만, 미리 확인하고 넘어가자면 다음과 같은 차이점이 있다.

  • by 에 붙은 필드의 개수는 2개 이상이다. 반면 chart는 2개까지이며, timechart는 1개만 지정이 가능하다.
  • 열분할로 결과가 나온다. 이 의미는 아래의 그림을 보면 이해가 된다. 그림으로 설명하면 아래처럼 by절과 그 결과가 모두 column으로 이뤄진다.

2. chart 사용해보기

앞서 1.에서 확인했던 stats와 동일한 쿼리를 사용하여 chart의 결과를 비교해보자.

1) stats, chart

  • stats
index=botsv1 
| stats c by host, status

  • chart
index=botsv1 
| chart c by host, status


chart 커맨드는 첫 번째 by절인 host를 사용하여 결과를 그룹화 한다. host의 값에 따라 결과가 행으로 표시된다. 두 번째 by절인 status를 사용하여 결과를 별도의 컬럼으로 분할한다. status 필드 의 값이 컬럼 필드가 된다.

여기서 다시 생각을 되돌이켜보자. stats는 단순히 컬럼으로 데이터를 분할하여 표시하였다면 chart는 컬럼과 row모두 데이터를 분할하여 표시한다고 볼 수 있다.

첫번째 by절이 row를 분리, 두번째 by절이 column을 분리한다.

chart의 기본 문법은 다음과 같다.

chart (stats-function(field) [AS field]) BY <row-split> <column-split> | OVER <row-split> BY <column-split>

2) chart가 stats와 다른 것

  • chart의 집계결과가 0이더라도 테이블에 표시된다. 예를들어 status값이 null이면서 host값이 존재하는 경우 chart의 경우 아래처럼 결과가 나온다.

    하지만 stats의 경우 같은 데이터일 경우라도 group by 하려는 필드의 일부가 null인 경우 아래처럼 표시되지 않는다.
  • by 절에 지정할 수 있는 필드 수는 stats는 3개 이상이 가능하며, chart는 최대 2개까지 이다.

3. chart를 시각화 할 때에는 chart로

왜냐면, chart는 그러기 위해 나온 집계명령어이다. 2에서 사용했던 명령어를 그대로 사용해서 시각화 해보면 아래와 같다.

1) stats와 chart의 시각화 차이점

  • stats는 여러개의 host명이 중복이 됨에도, x축으로 나오고 있다.
  • status 필드가 값 자체로 인식되어 200, 304등이 y축에 표시되고 있어 정확한 정보를 전달하지 않는다.

chart그래프 자체가 맨 첫번째 열의 데이터를 x축으로 사용하기 때문인데, 따라서 chart명령어를 이용한 결과가 그래프 시각화로 적절하다.

chart 그래프를 확인해보면 아래와 같이 status의 범례를 바로 확인할 수 있고, 중복된 host값이 존재하지 않는다. 따라서 host와 status의 그룹화된 결과를 한눈에 확인할 수 있다.

4. timechart

1) 사용법

timechart는 간단하다. chart의 row분할을 시간으로 하는 개념이라고 보면 된다.

chart에서 row분할 필드가 시간으로 고정되어있기 때문에 by절은 1개로 제한되어있다.

기본 문법은 다음과 같다.

timechart (stats-function(field) [AS field]) BY <column-split>

아래의 쿼리를 실행한 결과를 확인해보면 다음과 같다.

index=botsv1 
| timechart count by status

업로드중..

결과 테이블의 구조는 chart와 같고, row부분이 time으로 나뉘어져있음을 볼 수 있다.

시각화 해보면, _time 필드를 x축으로 이루고 y필드를 count로 이루고 있는 차트를 확인할 수 있다.

2) timechart와 chart의 차이점

  • by절이 1개만 가능하다.
  • 첫번째 row를 분리하는 컬럼은 시간으로 고정되어있다.

시간에 따른 count 추이, 집계를 확인하고 싶을 때 사용하면 좋을 것 같다.

오늘은 여기까지이다. 그 외 명령어 별 자세한 설명을 확인하고 싶은 경우 공식 문서를 참고하길 바란다!

post-custom-banner

0개의 댓글