스플렁크 spl을 구성하는 command 중에는 여러 타입들이 있습니다. 각 타입의 특성을 알면 spl을 사용하고 이해하는데 큰 도움이 되니 잘 기억해 두시면 도움이 될 겁니다.
Command Type / 명령어 종류
- distributable streaming
- centralized streaming
- transforming
- generating
- orchestrating
- dataset processing
명령어들은 여러 분류에 포함되기도 합니다. stats 명령어는 transforming 하나만 포함되지만 몇몇 명령어는 streaming 명령어 이면서 generating 명령어입니다.
Command Type을 알아야 하는 이유
명령어 유형을 이해하면 데이터가 어떻게 처리되는지 이해할 수 있고, 이는 검색 성능을 최적화 하는데 도움이 됩니다.
예를들어 이런 spl이 있다고 합니다.
search... | lookup... | where... | eval... | sort... | where... |...
보통의 spl은 이런 식으로 실행 됩니다.
search head : spl 전송 ->
-> indexer : 원본 데이터 검색 및 일부 spl 처리->
-> search head : 나머지 spl 처리 및 표현
예시 spl은 이렇게 처리됩니다.
search head : 검색문 전송 ->
-> indexer : 원본 데이터 검색, search ~ eval 명령문 처리 ->
-> search head : sort 명령어부터 나머지 실행 후 결과 표현
각 명령어의 type은 이렇습니다.
- search ~ eval : distributable streaming
- sort : dataset processing
- where : distributable streaming
sort 명령어는 dataset processing 명령어입니다. sort 명령어는 모든 데이터가 한 곳에 있어야 처리가 가능하므로 처음 네 개의 명령어는 인덱서에서 처리되고, 처리된 데이터는 검색헤드로 전송되고 이후에는 검색헤드에서 모든 처리가 됩니다. indexer 에서 search head로 전달된 데이터는 다시 indexer로 돌아갈 수 없습니다. (sort : 정렬은 모든 데이터를 확인 후에 처리할 수 있음)
포인트
- spl은 non-streaming 명령 전까지 인덱서에서 실행된다.
- 명령어를 보면 어떤 splunk 구성에서 실행되는지 알 수 있다.
- 의도적으로 명령어가 처리되는 곳을 선택할 수 있다.
이렇기 때문에 스플렁크에서는 spl을 작성할 때 최대한 streaming 명령어를 앞에서 사용하라고 권고합니다.
Streaming and non-streaming commands / 스트리밍과 비 스트리밍 명령어
스트리밍 명령어는 각 이벤트에서 명령어를 처리합니다. 해당 command를 처리할 때 하나의 이벤트만 필요합니다. non-streaming command는 처리할 때 여러 이벤트가 필요합니다. sort 명령어는 하나의 이벤트에서 처리될 수 없고 모든 데이터 세트가 있어야 처리될 수 있습니다. 이게 streaming command와 non-streaming command의 차이입니다.
명령어 종류 설명
Distributable Streaming / 배포 가능한 스트리밍
- 각 이벤트에서 처리가 가능
- 이벤트의 순서가 중요하지 않음
- 인덱서에서 처리가 가능함
ex ) eval, fields, makemv, rename, regex, replace, where
Centralized Streaming / 중앙 집중식 스트리밍
- 각 이벤트에서 처리가 가능함
- 이벤트의 순서가 중요함
- search head에서만 작동함
ex ) head, steamstats, mode of dedup,
Transforming / 변형
- 검색 결과를 데이터 테이블로 정렬
- 모든 데이터가 있어야 처리 가능
- 검색 결과를 차트에 맞는 구조로 변환하는데 필요
ex ) stats, chart, timechart, top, rare
Genrating / 생성
- 데이터를 가져오는 명령
- 일반적으로 spl 맨 앞에 사용
- search 명령은 암묵적으로 맨 처음에 사용됨
ex ) search, makeresutls, datamodel, tstats, inputlookup, dbinspect, pivot
Orchestrating / 조율
- 검색 처리 방식의 일부를 제어
- 최종 결과에 영향을 미치지는 않음
- 전체 검색을 더 빨리 완료할 수 있게 검색 최적화를 활성화 하거나 비활성화 할 수 있음
ex ) redistribute, noop, localop
dataset processing / 데이터 세트 처리
- 전체 데이터 세트가 필요함
- 변환, 배포, 스트리밍, 오케스트레이션 기능이 없음
마무리
이렇게 splunk command type에 대해서 알아봤습니다. 스플렁크 명령어 타입을 이해하면 각 splunk 자원을 최대한 사용하면서 spl 최적화를 할 수 있습니다.
출처 – splunk doc