커스텀 커맨드를 사용하는 경우
- Splunk가 아직 개발하지 않은 방식으로 데이터를 처리하고 싶을 때
- Splunk에 의해 저장되지 않은 외부 소스의 데이터를 검색 파이프라인으로 가져오려고 할 때
- 검색 결과를 외부 시스템으로 내보내려고 할 때
커스텀 커맨드 명령 작동 방식
커스텀 커맨드는 검색 시 splunkd와 함께 실행되는 외부 python 스크립트를 통해 데이터를 처리한다.
- Splunk Enterprise는 SPL의 각 줄을 분석하고 검색 명령을 확인한다.
커스텀 커맨드는 commands.conf 파일의 스탠자로 지정된다.
/etc/apps/local/commands.conf
[ whois ] - 검색 명령어가 커스텀 커멘드인 경우 Splunk Enterprise는 해당 명령어에 대한 Python 스크립트를 실행한다.
- Splunk Enterprise는 STDIN을 통해 Python 스크립트를 통해 검색 결과를 청크로 연결하고
STDOUT을 통해 기록한다. - Python 스크립트를 처리한 후 검색 결과가 검색 파이프라인에 다시 입력된다.
커스텀 커맨드 프로세스 전반에 걸쳐 splunkd와 python 스크립트는 일련의 getinfo 및 execute 명령을 통해 메타데이터를 교환한다.
- splunkd는 getinfo 명령을 전송하여 python 스크립트에서 명령 유형 및 필수 필드를 포함한 정보를 요청
- splunkd는 파이프라인의 각 검색 결과 청크에 대해 별도의 execute 명령을 보냄
- python 스크립트는 검색 결과의 각 부분을 처리
- python 스크립트는 splunkd에 응답을 다시 보냄
모든 검색 결과가 python 스크립트를 통과한 후 splunkd는 STDIN 파이프를 닫아 프로세스를 종료
커스텀 커맨드를 생성하는 작업 단계
- Splunk Enterprise에서 새 앱을 만든다.
사용자 정의 검색 명령은 Splunk Enterprise에서 별도의 앱으로 가장 잘 작동한다. - 앱 내 검색 명령을 위한 python 스크립트를 만든다.
- 검색 명령어를 등록한다.
- 검색 명령에 대한 길잡이 텍스트를 활성화한다.
- 앱을 패키징하고 배포한다.
- 앱 및 액세스 제어 설정을 수정한다.
커스텀 커맨드를 생성하기 위한 도구
python용 Splunk Enterprise SDK에는 커스텀 커맨드 생성에 도움이 되는 도구가 포함되어 있음
GitHub에서 Python용 Splunk Enterprise SDK를 다운로드 할 수 있다.
Python Class
python용 Splunk Enterprise SDK의 splunklib.searchcommands 모듈에는
사용자 지정 검색 명령을 생성하는 데 필요한 클래스가 있다.
사용하는 특정 클래스는 생성하려는 명령 유형에 따라 다름
사용자 정의 검색 명령을 위한 python 클래스 참조
https://github.com/splunk/splunk-sdk-python/tree/master/splunklib/searchcommands
샘플 앱 및 커스텀 커맨드 예
splunk-app-examples 저장소의 custom_search_commands/python 디렉터리에는 각 유형의 커스텀 커맨드에 대한 예제가 포함된 샘플 앱이 있다.
https://dev.splunk.com/enterprise/docs/devtools/customsearchcommands/customsearchcmdexamples/
템플릿
- filter.py : 데이터세트 처리 명령을 위한 템플릿
- generate.py : 명령 생성을 위한 템플릿
- report.py : 명령 변환을 위한 템플릿
- stream.py : 스트리밍 명령을 위한 템플릿
템플릿을 다운로드하려면 GitHub의 splunk-app-examples 리포지토리에 있는 아래 링크 참조