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 추이, 집계를 확인하고 싶을 때 사용하면 좋을 것 같다.
오늘은 여기까지이다. 그 외 명령어 별 자세한 설명을 확인하고 싶은 경우 공식 문서를 참고하길 바란다!