스플렁크를 사용하다보면 따옴표와 큰따옴표를 자주 볼 수 있다.
헌데 모르고 지나치기엔 자주 나오고, 사용하기도 하고 사용하지 않기도 하며,
단순히 읽고 보는 입장에선 있으나 없으나 사람 뇌로 쿼리문을 이해하는데 큰 문제가 없으니 참 애매한 대상이다.
하지만 쿼리를 작성해서 Splunk에 넣어야하는 입장에선 사소하지만 중요한 문법이기에,
로직을 멀쩡히 짜서 넣었는데도 따옴표, 큰따옴표, 생략 여부에 따라 데이터가 나오기도 하고 바뀌기도 하고 안나오기도 하니
제대로 모르면 나중에 디버깅을 위해 어두운 등잔 밑에서 시간을 낭비하게 할 수도 있다.
따옴표와 큰 따옴표는 다음과 같은 기능을 상황에 따라 가진다
큰 따옴표 (")
- 문자열을 하나로 묶어준다
- 값 그 자체
따옴표 (')
- 해당 컬럼이 가진 값을 호출한다
이렇게만 보면 잘 이해가 가지않는다.
일단 큰 따옴표가 문자열을 하나로 묶어준다는 의미부터 차근차근 살펴보자
공백 (스페이스)는 모든 명령어를 나누는 기본 구분자다.
|search host=호스트 이름
그렇기 때문에 위와 같이 검색하면 호스트 이름 이란 명칭의 호스트는 검색되지 않는다.
host=호스트 란 명령어까진 이해를 하지만 그 다음에 나오는 이름이란 단어가 무엇인지 인식이 안된다.
이런 건 어느 언어나 비슷하기 때문에
왜_프로그래머들이_이런_식으로_띄어쓰기를_하는지_알_수_있다.
문자열이 나눠지지 않으면서 띄어쓰기를 한 것처럼 보일 수 있는 꼼수이기 때문이다.
|search host="호스트 이름"
하지만 큰 따옴표를 써서 이렇게 하나의 문자열로 묶어주면 이제 '호스트 이름' 이란 명칭의 호스트가 검색이 된다.
이런 걸 신경쓰기 싫다면 Splunk에서도 언더바(_)를 이용해 컬럼명을 짓는 것이 현명할 수 있다.
그 외 나머지 기능을 이해하려면 컬럼명을 요구하는 명령어에 대해 알아야 한다.
대표적으로 계속해서 다루고 있는 search 명령어다.
|search host=서버이름
|search "host"=서버이름
|search "host"=서버이름
|search "host"="서버이름
예를들어 이 4가지 쿼리문은 모두 똑같이 동작한다.
왜냐하면 search의 문법은
컬럼명 = 컬럼값
무조건 위와 같이 동작해야하기 때문이다.
등호의 왼쪽엔 무조건 컬럼명이 들어가야하기 때문에
큰따옴표를 사용하지 않아도 알아서 컬럼명으로 알아듣고,
큰따옴표를 사용해도 그 값을 갖고 있는 컬럼명을 찾는다.
따라서 큰따옴표가 값 그 자체를 표기하는 기능이 있더라도,
Splunk는 이를 값으로 인식하지 않고 컬럼명으로 인식한다.
따라서 컬럼명이 공백이 있는 '시스템 상태' 같은 이름이어도
|search "시스템 상태"="정상"
컬럼 명으로 인식해서 시스템 상태 컬럼 중 정상 값을 가진 항목을 검색한다.
큰따옴표가 아닌 따옴표는 사용법이 아주 다르다.
|eval 출력 = "입력"
|eval 출력 = '입력'
이 쿼리들을 실행해보자
첫 번째 줄에서 출력을 표시하면 문자열 입력이 표시된다
하지만 두 번째 줄에서 출력을 표시하면 컬럼명 '입력' 에 저장되어 있는 값을 불러와 출력 에 넣어준다.
(만약 입력이라는 컬럼이 없다면 그냥 공백이 들어간다.)
규칙 자체는 간단하다.
그리고 Splunk는 거의 대부분 수식에서 따옴표를 사용할 필요가 없도록 안 쓰고 쿼리를 적어도 알아서 찰떡같이 알아먹는 기능이 있다.
|eval 물건값 = 원가 + 마진
위와 같은 쿼리를 따옴표 없이 쓴다면,
일단 등호의 왼쪽 물건값 은 무조건 컬럼명이기 때문에 띄어쓰기가 있지 않는한 간단하게 들어간다.
원가 + 마진 은 "원가"+"마진", 즉 문자열로 인식이 된다면 + 계산이 문자열 끼리도 가능해서 물건값 = "원가마진"이 된다.
하지만 Splunk는 찰떡같이 알아 듣기 때문에 '원가'+'마진'으로 알아 듣고 그 칼럼에 있는 숫자 가격을 불러와준다.
이런 식으로 동작하기 때문에 쿼리 작성시 따옴표 문법을 굳이 신경쓸 필요는 없다.
하지만 이런 문법을 유념해둬야지 Splunk가 찰떡같이 못 알아들을 때 금방 문제점을 찾을 수 있다.
복잡한 쿼리에서 따옴표 문법 오류가 났을 때, 실제로 문제가 없는 계산 로직을 보고 또 보며 시간을 낭비하기 일쑤다.
'Splunk Tech' 카테고리의 다른 글
Splunk 응용 - 통계 기능 stats, eventstats, streamstats (1) | 2023.02.23 |
---|---|
Splunk 기초 - Where 절의 효율적 사용 (0) | 2023.01.18 |
Splunk 기초 - Search 절을 이용한 필터링 (1) | 2023.01.18 |