Splunk를 이용해서 검색하다보면 어떤건 제외하고, 어떤건 포함하고 하는 식으로 이것 저것 조건을 만들게 된다. 그러다 보면 예외 처리나 포함하는 구문으로만 10줄이 넘어가게 된다. 이럴때 유용하게 사용할 수 있는 명령어가 있는데 바로 return과 format이다. 참고로 이 명령어를 사용하기 위해서는 subsearch를 사용하는 것이 거의 필수이다. (아닐 경우도 있겠지만 ^^. 대부분 그렇다.)
두개의 명령어가 매우 유사한 역할을 하기 때문에 같이 설명하겠다.
subsearch의 검색결과를 반환하는 역할을 한다. 이렇게 설명하면, subsearch를 모르는 사람은 알아듣기 어려울 수 있기 때문에 먼저 subsearch가 아닌 그냥 search로 검색했을 때의 결과를 확인해보자.
먼저 이러한 쿼리가 있다고 하자, 나는 여기서 action에 해당하는 값 4가지를 모두 최초 검색에 포함시키고 싶은 상황이다.
return 사용 결과는 다음과 같이 나온다.
search의 결과로 action="purchase" 가 나오는데 이게 return 명령어의 결과이다.
여기서 쿼리 전체에 subsearch를 씌워주게 되면 다음과 같이 쿼리가 실행된다고 보면 된다.
search의 결과로 action="purchase" 가 검색쿼리 그대로 수행이 된다. 본래 subsearch에서 return 을 하게 되면 문자열로 그 결과를 돌려주게 되는데, 따라서 쿼리 검색이 그대로 실행된다고 보면 된다.
공식 홈페이지에 보면 다음과 같이 나와있다. 총 3가지 사용법이 있는데, 모두 유용하다.
return 과 굉장히 유사한 역할을 한다. 하지만 여러 row를 처리할 때에는 return 보다는 format이 더 편리할 수 있다.
format도 검색 결과를 하나의 search문으로 만들어 반환해 주는데, return은 단순히 OR로 묶어서 반환해주는 반면 format은 그 사이에 조건을 넣을 수 있고, 전체 괄호로 묶어서 반환할 수 있어 대량의 예외 조건이나 lookup을 예외하고 싶을 때 사용하면 좋을 것 같다.
index=demo1
| table action status
| format
이렇게 필드와 필드 사이는 AND, row와 row 사이는 OR로 묶여서 return이 된다. 이것을 subsearch로 묶어서 사용하게 되면 아래 보이는 전체 검색이 검색되는 것이라 보면된다.
index=demo1
| table action status
| format "[" "(" "AND" ")" "OR" "] "
① 전체 반환 문자열 시작 부분: 전체 반환되는 문자열의 시작 부분을 "["
으로 묶을 것이라고 지정한 것 이다. 따라서 문자열의 맨 첫부분이 [
으로 시작한다. 디폴트는 ( 문자열이다.
② row와 row사이 시작 부분: row와 row사이를 구별하는 시작 부분을 묶어줄 문자를 (이라고 지정한 것 이다.
③ 필드와 필드 사이: AND로 지정했다.
④ row와 row사이 마지막 부분: row와 row사이를 구별하는 시작 부분을 묶어줄 문자를 )이라고 지정한 것 이다.
⑤ row와 row사이의 조건: 행별로 OR로 구분한다고 지정한 것 이다.
⑥ 전체 반환 문자열 마지막 부분: 전체 반환되는 문자열의 마지막 부분을 "]"
으로 묶을 것이라고 지정한 것 이다. 따라서 문자열의 맨 마지막부분이 ]
으로 시작한다. 디폴트는 ) 문자열이다.
다른 옵션으로도 실행해봤다.
index=demo1
| table action status
| format "[" "(" "&&" ")" "||" "]"
최대 반환 row 수 maxresults
최대로 검색하는 row수를 지정할 수 있다. 가장 위의 행부터 n개를 반환한다.
mvsep 하나의 cell 안에 여러개의 값이 개행문자 기준으로 있다면, 이것을 따로 (별도의 컬럼으로 취급하여) 조건을 넣어줄 수 있다. 예를들어 다음과 같은 상황이라고 보자.
여기서 멀티컬럼 값들 사이에는 || 조건으로 묶어줄 수 있도록 다음과 같이 실행하였다.
오늘은 return, format을 알아보았다. 더 자세한 내용은 Splunk 문서를 보면 확인할 수 있다. 하지만 블로그로도 충분할거라고 본다!