Splunk를 사용하다보면 일단 거의 집계관련 커맨드는 stats만 사용하게 된다. 이것으로 대부분의 내용 커버가 가능하다. 그래서 사실 이것만 알아도 문제는 없지만, 가끔 아주 간혹 chart 명령어를 사용할 때가 있다.
stats는 시각화를 하게 될 경우 원하지 않는 형태가 나오는 경우가 있는데, 이럴때 주로 chart를 사용해주면 해결된다. 또 timechart도 간혹 사용하게 된다. 물론 stats명령어에 이것 저것 추가하여 chart와 timechart의 기능을 하게할 수도 있지만, 편리하게 이미 개발된 명령어를 쓰는게 낫다.
아무튼 오늘은 이 3가지의 기능과 사용법과 차이에 대해 알아두고, 어떤 경우에 명령어를 쓰는게 좋은지 알아보도록 하겠다.
아래와 같은 쿼리를 입력하면 다음과 같은 결과가 나온다.
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 필드
이따가 chart와 timechart를 설명하면서 더 자세히 알게되겠지만, 미리 확인하고 넘어가자면 다음과 같은 차이점이 있다.

앞서 1.에서 확인했던 stats와 동일한 쿼리를 사용하여 chart의 결과를 비교해보자.
index=botsv1
| stats c by host, status

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>


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

chart그래프 자체가 맨 첫번째 열의 데이터를 x축으로 사용하기 때문인데, 따라서 chart명령어를 이용한 결과가 그래프 시각화로 적절하다.
chart 그래프를 확인해보면 아래와 같이 status의 범례를 바로 확인할 수 있고, 중복된 host값이 존재하지 않는다. 따라서 host와 status의 그룹화된 결과를 한눈에 확인할 수 있다.

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로 이루고 있는 차트를 확인할 수 있다.

시간에 따른 count 추이, 집계를 확인하고 싶을 때 사용하면 좋을 것 같다.
오늘은 여기까지이다. 그 외 명령어 별 자세한 설명을 확인하고 싶은 경우 공식 문서를 참고하길 바란다!