스플렁크 spl을 활용할 때 필요한 기초 개념에 대해서 알아봅니다. 검색 파이프라인, 따옴표, 이스케이프 문자, 주석, 검색모드 등 검색할 때 필요한 기본 내용에 대해서 알아봅니다.
검색 파이프 라인 / search pipeline
검색은 파이프 문자( | )로 구분된 명령들로 구성됩니다. 파이프 문자 다음 첫 번째 문자열이 명령어고 나머지 문자열이 각 명령어를 사용할 때 필요한 내용들입니다.
sourcetype=syslog ERROR | top user | fields - percent

위 같은 spl문이 있을 때 이 spl이 처리되는 방식은 그림과 같습니다.
- 맨 처음 디스크에 데이터가 저장되어 있습니다.
- sourcetype=syslog ERROR 라는 데이터 덩어리(데이터 세트)를 가져옵니다.
- | top user 명령어를 처리하면서 데이터 세트는 10개의 행만 남기고 줄어듭니다.
- | fields – percent를 사용해서 percent 열을 제거합니다.
이렇게 각각의 파이프를 지날 때마다 데이터 세트는 줄어들고, 변환 되면서 마지막에 원하는 데이터가 남게 됩니다.
검색 파이프라인은 파이프 문자를 사용하여 연속된 명령을 연결하는 splunk 검색 구조를 의미합니다. 파이프 문자는 한 명령어의 결과를 다음 명령의 입력으로 사용하도록 합니다. 이것을 반복적으로 이용해서 원하는 결과를 얻게 됩니다.
따옴표와 이스케이프 문자 / Quotes and escaping characters
검색을 할 때 공백, 쉼표, 파이프, 따옴표, 대괄호가 포함되어 있는 구문이나 필드 값들은 따옴표로 감싸야 합니다.
- addtocart | stats count : addtocart 문자열이 포함된 이벤트의 수
- … | search “addtocart | stats count” : “addtocart | stats count” 문자열이 포함된 이벤트 필터링
또한 boolean 연산자도 문자열로 검색하기 위해서는 따옴표로 감싸야 합니다.
- action “=” : action과 문자 “=”이 함께 있는 이벤트를 필터링
- purchase “itemId=EST-12” : purchase문자열과 “itemId=EST-12″문자열이 함께 있는 이벤트 필터링
- purchase itemId=EST-12 : purchase와 필드 itemId에 EST-12 값이 있는 이벤트 필터링
백슬래시 (\, escape)는 따옴표, 파이프, 자기 자신(\)을 이스케이프 하는데 사용 됩니다.
- … | eval fields=”\”” : “를 값으로 fields 생성
- … | eval fields=”\\” : \를 값으로 fields 생성
- … | eval fields=”\|” : | 를 값으로 fields 생성
주석 / commant
“`spl“`
백틱(`) 3개로 spl을 감싸면 주석 처리할 수 있습니다.
- linux OR windows : ctrl + /
- Mac OS : command + /
검색 모드
- 고속 모드 (Fast Mode)
- 검색 성능을 우선하며, 기본 필드와 인덱스 타임 필드만 가져옵니다.
- spl에서 명시적으로 사용한 필드 정보만 가져옵니다.
- 대시보드 검색의 기본 모드입니다.
- 스마트 모드 (Verbose Mode)
- 실행하는 검색이나 보고서의 검색에 최적화된 결과를 정보만 가져옵니다.
- transforms 명령이 포함되어 있으면 고속모드처럼 동작합니다.
- transforms 명령이 포함되지 않은 경우 상세모드처럼 동작합니다.
- 보고서의 기본 검색모드입니다.
- 상세 모드 (Smart Mode)
- 검색 시간이 가장 오래 걸립니다. 모든 필드의 정보를 가져옵니다.
각 모드는 크게 중요하지 않습니다. 사용하다 보면 자연스럽게 알게 되는 내용입니다. 그냥 상세모드는 모든 필드를 보여준다. 고속 모드는 필요한 필드만 가져온다. 정도만 기억하고 있으면 충분합니다. 가끔 검색하고 결과에서 사용하려는 필드가 사라지는 경우가 있을 겁니다. 그럴 때에는 여러가지 이유가 있을 수 있지만 검색모드가 고속모드여서 그런 경우들이 있으니 한 번씩 확인할 수 있을 정도로만 기억해주시면 됩니다.
암묵적 search 명령어
index=tutorial
위 검색문에는 search 명령어가 암묵적으로 생략된 것입니다.
search index=tutorial
splunk는 검색문 맨 처음에 나온 search 명령어는 생략합니다. 이대로 검색을 하면 index=tutorial로 검색이 실행됩니다.
(search 명령어는 Gerating 명령어입니다. 데이터를 가져오는 명령어입니다. 따라서 맨 앞에 search 명령이 없다면 잘못된 spl 이므로 검색이 실행될 수 없습니다.)
키워드와 구문 / keywords and phrases
index=tutorial GET
index=tutorial /cart
index=tutorial GET /cart
index=tutorial "GET /cart"
- GET이라는 문자열이 있는 이벤트를 반환합니다.
- /cart 라는 문자열이 있는 이벤트를 반환합니다 .
- GET과 /cart 두 문자열이 모두 있는 이벤트를 반환합니다.
- “GET /cart” 라는 하나의 문자열이 있는 이벤트를 반환합니다.
3번처럼 GET /cart 키워드 두 개를 작성하면 공백에 AND 연산자가 있다고 생각하면 됩니다. 물론 키워드와 구문을 공백으로 연결해도 마찬가지입니다.
파일 경로
D:\Program Files\splunk 와 같은 경로를 검색하기 위해서는 백슬래시 문자를 이스케이프 해야합니다.
–> D:\\Program Files\\splunk
만약 공백이 포함되어 있다면 따옴표로 감싸줍니다.
–> “D:\\Program Files\\splunk test folder”
와일드 카드 / wildcards
검색 범위를 넓혀야 할 때 사용됩니다.
- 모든 명령어 : *
- eval 및 where 명령일 때
- 여러 문자 일치 : %
- 단일 문자 : _
와일드카드는 구체적으로 작성해야 합니다. 모호하게 작성할 수록 검색 효율이 떨어지고, 검색 시간이 길어집니다. 또한 시스템 리소스를 많이 사용하게 됩니다. * 문자 자체를 검색하고 싶을 때는 \*
권고하는 방식
- 용어 끝에 사용 ex) fail*
- 필드=값 검색에서 사용 ex) status=fail*
논리 연산자 / logical operators
AND, OR, NOT, XOR 사용 가능하며 논리 연산자는 대문자로 사용해야 합니다.
AND 연산자는 항상 구문 사이에 포함되어 있습니다. GET /cart 와 GET AND /cart는 같은 결과를 반환합니다.
NOT 연산자는 바로 뒤에 오는 항목에만 적용됩니다. 여러 항목에 적용하려면 항목을 괄호로 묶어 사용해야 합니다.
논리 연산자 평가 순서
평가 순위 | search 명령어 | eval 및 where 명령어 |
1 | 괄호 안의 표현식 | 괄호 안의 표현식 |
2 | NOT 절 | NOT 절 |
3 | OR 절 | AND 절 |
4 | AND 절 | OR 절 |
5 | XOR 절 |
예시
search 명령어 OR과 AND의 평가 순서
host="www1" AND status=200 OR action="addtocart"
위 검색은 아래 검색과 같은 결과를 반환합니다.
host="www1" AND (status=200 OR action="addtocart")
where 명령어 OR과 AND의 평가 순서
...| where host="www1" AND status=200 OR action="addtocart"
위 검색은 아래 검색과 같은 결과를 반환합니다.
...| where (host="www1" AND status=200) OR action="addtocart"
AND NOT과 NOT OR을 사용한 예시
host="www1" NOT status=200 AND NOT status=505
위 검색은 아래 검색과 같은 결과를 반환합니다.
host="www1" NOT (status=200 OR status=505)
마무리
spl을 작성할 때 알아야 하는 기본 개념에 대해서 알아봤습니다. 이 내용은 splunk search manual에 대한 내용입니다. search manual에서 필요하다고 생각되는 부분을 제 아주 주관적인 관점에서 골라 작성한 것입니다.
출처 – splunk doc