보안 업무든, 경제 업무든,
스플렁크의 stats 기능은 이 프로그램의 알파이자 오메가이다.
하지만 Splunk의 쿼리 언어인 SPL 을 포함한 SQL등의 대부분의 PL은 윗 항의 데이터와 아랫 항의 데이터를 직접적으로 비교하지 못한다.
프로그램 언어가
IF (DATA[n] > DATA[n-1])
DO ACTION();
같은 로직으로 간단하게 전 후 데이터를 비교 할 수 있지만,
SPL 언어는 (논리적으로) 한 데이터 결과 행마다 한 번씩 쿼리가 실행되는 구조다.
그러므로 1번째 행과 2번째 행은 서로 교류하지 못한다.
하지만 어떻게든 해야한다면 어거지로 만들어낼 수 있다.
아주 간단한 예를 들어 스플렁크가 2달동안 수집한 로그 수를 비교한 뒤,
몇 %가 증감 했는지 계산하는 간단한 쿼리를 써보자
|tstats count by _time span=1mon
위와 같은 쿼리를 2달의 기간을 설정하여 검색하면
월 별로 몇 개의 쿼리를 수집했는지 2개의 결과 행이 출력된다.
하지만 아까 언급했듯이 윗항의 데이터와 아랫 항의 데이터를 직접적으로 비교하지 못하기 때문에
이 두개를 하나의 행으로 합쳐줘야 한다.
일단 이 검색 구문으로는 2개의 행만 나오기 때문에 따로 필터링을 해줄 필요는 없지만,
실무에선 이보다 많은 행 중에서 2개를 골라야 하기 때문에 필터링 구문을 포함하여 작성한다.
|tstats count by _time span=1mon
|top limit=2 _time count
top 명령어는 단독 명령어로 매우 드물게 쓰이긴 한다.
칼럼 명을 n개 (여기선 _time과 count 2개) 적을 경우, 가장 앞에 있는 칼럼인 _time을 내림차 순으로 정렬하여 2개 행만 표시한다.
그러므로 맨 윗행이 최신 달, 아랫행이 그 이전 달로 정렬된다.
이 상태에서 stats 명령어를 한번 더 쓴다.
|tstats count by _time span=1mon
|top limit=2 _time count
|stats first(count) as 이번달로그수 last(count) as 저번달로그수
이렇게 되면 count 칼럼의 가장 첫번째 값을 표시하여 최근 달의 count 값을 표시하고,
last는 이름에서 유추할 수 있듯이 가장 마지막이다.
그렇게 2개 행의 값을 하나의 행으로 합친다.
|tstats count by _time span=1mon
|top limit=2 _time count
|stats first(count) as 이번달로그수 last(count) as 저번달로그수
|eval 증감률=abs(round(1-이번달로그수/저번달로그수,2))*100
그 후 eval 구문을 통해 간단히 증감률을 계산해주면 원하는 결과를 뽑아낼 수 있다.
'Splunk Tip' 카테고리의 다른 글
Splunk로 COUNTIF 같이 조건식 계산을 하고 싶어요! (0) | 2023.02.23 |
---|---|
Splunk 에서 문자열을 합치는 2가지 방법 (0) | 2023.02.23 |
Splunk에서 리눅스 스크립트를 작성할때 CURL 35 에러가 발생한다면? (0) | 2023.02.14 |
Splunk로 효율적인 실시간 누적 통계 검색하기 (0) | 2023.02.07 |
리눅스 스크립트를 이용해 Splunk 검색하고 검색 결과 다운로드하기 (0) | 2023.01.18 |