아임노드

Splunk_검색 #5 본문

 

비교 분석

 

eval

  • 이 명령어에 사용하는 함수는 검색 결과 값의 변환, 검증을 수행하며 함수 실행 결과 값을 반환하는 형식
  • ...| eval [반환값_저장변수] = 함수(인자1,인자2..)
  • eval 함수는 문자열을 인자로 취하고 연산 결과를 반환
  • 문자열은 " "로 감싸서 표시
  • 사용
    • Splunk가 수집하는 모든 로그에서 완벽한 필드 추출은 매우 어려움
    • 그렇기에 때로는 원하는 값을 추출하려고 필드 값을 다시 조작해야 하는 상황 종종 발생
    • 이때 eval 명령어 함수가 요긴하게 사용됨 (많이 연습하도록!)

case(X,"Y",...)

  • 여러 개의 조건을 검증할 때 사용
  • 첫 번째 인자가 참인 경우 두 번째 인자의 내용 반환
    세 번째 인자가 참이면 네 번째 인자가 실행
  • 월 이름을 기반으로 분기(quarter)를 반환하는 코드
  • index="book" sourcetype="access_combined_wcookie"
    | eval description=case(error=404, "Not found", error=500, "Internal Server Error", error=200, "OK")

  • index="book" sourcetype="access_combined_wcookie"
    | eval quarter=case(date_month="january","1Q", date_month="february","1Q",date_month="march","1Q",date_month="april","2Q", ...)

뭐가 바뀐 건지 코드를 잘못 쓴건지..?

일단 명령어가 이런 역할을 한다만 알아보고 뒤로 가면서 실제 적용할 때 활용해봐야겠다.

 

cidrmatch("X",Y)

  • IP 주소 Y가 네트워크 범위 X에 존재하는지 확인
  • 반환 값은 참 또는 거짓

if(X,Y,Z)

  • X가 참이면 Y를 실행하고
    X가 거짓이면 세 번째 인자인 Z를 실행
  • *
    | eval ip1="10.10.0.100", ip2="100.10.0.100"
    | eval network1=if(cidrmatch("10.10.0.0/24", ip1), "local", "external"), network2=if(cidrmatch("10.10.0.0/24", ip2), "local", "external")
    | table ip1, network1, ip2, network2

 

like(X,"Y")

  • X 필드에서 일부 문자열인 Y를 찾는다.
  • X에서 Y를 찾을 수 있으면 참을 반환
  • Splunk에서 like 함수의 와일드카드 문자열은 * 이 아닌 -> % 사용 (like 이 와일드카드를 사용한다.)

match(X,"Y")

  • like 함수가 일부라도 맞는 값을 찾는다면 match 함수는 함수명과 같이 정확한 일치 여부를 비교한다.
  • 문자열 비교에 대소문자는 구분하지 않는다.

다중 문자열과 시간

 

mvindex(X,Y,Z)

  • 필드 X에 있는 Y번째 값을 반환
  • Y는 인덱스 번호이며 0이 첫 번째 값을 의미
  • 세 번째 인자 Z는 선택적으로 사용
    • Z값 지정시 함수는 Y부터 Z까지의 값 반환

split(X,"Y")

  • 구분자 Y를 이용해서 X를 분할해 다중값 형식으로 반환

substr(X,Y,Z)

  • 이 함수에서 세 번째 인자 Z가 없다면
    필드 X의 Y(1부터 시작)부터 시작해서 문자열 끝까지를 반환한다.
    • Z가 주어지면 Y부터 Z까지의 문자열 반환

round(X,Y)

  • X를 Y자리 수 기준으로 반올림
  • round(2.555, 2)는 결과로서 2.56을 얻을 수 있다.
  • 나누기 계산을 할 경우 소수점 자리가 급격히 늘어나는 것을 방지

urldecode(X)

  • URL 인코딩이 돼 있는 X를 디코딩해 반환
  • 이 함수를 사용하면 인코딩 문자열을 디코딩해서 한글이 있는 경우라도 바로 확인할 수 있다.

시간함수

 

strftime(X,Y)

  • 유닉스 시간 X를 지정한 Y형식으로 출력

strptime(X,Y)

  • Y 형식으로 된 X시간 문자열을 입력받아서 유닉스 시간을 반환 (strftime의 반대)

now()

  • 검색어를 실행시킨 시간을 유닉스 시간 형식으로 반환
  • 사용 사례
    • 침입 탐지 시스템이 공격을 탐지했다고 가정하는 경우 최초 탐지 후
      오늘까지 얼마나 시간이 흘렀는지를 계산할 때 기준점을 제공한다.