splunk/ Search Under the Hood

Algo rhythm·2022년 8월 8일
0

Search Under the Hood

스플렁크 구조

1. 순서

  1. search head에서 동작 시작
  2. search peer에 명령 전달
    • indexer
    • group of indexers
  3. 관리자 롤을 통해 다중 인덱스를 이용 가능
  4. 인덱스된 이벤트는 bucket으로 이동
    • hot : 이벤트가 가장 먼저 모이는 곳
    • warm : 읽기 전용
    • cool : warm 보다 오래된 읽기 전용으로 구성 인듯
    • frozen : 삭제 혹은 보관할 오래된 데이터

2. buckets

  1. 가장 먼저 도착하는 hot = jounal.gz + Time Series Index file(TSIDX)로 구성됨
    • journal = raw data를 128kb로 조각내어 저장
    • TSIDX = jounal의 index 키
  2. 검색을 시작하면 TSIDX로 먼저 확인
  3. Hot bucket to Warm bucket 과정에서 TSIDX 기반의 Bloom Filter가 나타나며, hashing algorithm으로 처리 → 이 알고리즘을 Bloom Filter가 읽음

명령어

1. transforming

테이블에 정렬된 값 반환
구성

stats
timeseries
chart
top
rare

2. Streaming

  • Centalized : search head에서 실행
    Transforming처럼 검색의 형 변환
    선입선출
    결과 출력
  • Distributed : indexer로 보냄
    bloom filter, TSIDX로 검색
    전체 결과를 세팅없이 즉시 처리
    멀티 인덱서 가능 + 개별 처리
rename
eval
fields
regex

Command types link : https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Commandsbytype

3. 성능을 고려한 명령 순서

3-1. Streaming-Distributed 명령어를 먼저 입력
3-2. Streaming-Centralized or transforming 입력 → 결과 출력

Breakers and Segmentation

Segmentation

  1. major breakers : 단어, 구, 용어, 숫자, 띄어쓰기, 줄 바굼, 맨 앞 커서(뭔지 모름), 탭, 괄호, 감탄부호, 쉼표

  2. minor breakers : "/", ":", ".", "-", "$"를 통해 데이터의 세부 분할 검색 가능

  3. TERM 명령어를 통해 minor breakers 규칙을 포함한 문장을 검색 가능

  4. term 명령어는 모든 major breaker를 제외해야함

    • Ex) action=term("Got Caught Making Fun Of Boss")
  5. term(EventType=8)의 key/pair은 가능

    • 단, aliased field 대신 본래의 필드 명을 사용해야 함.
    • aliased field를 활용하는 방법
      ex) index=network sourcetype=cisco_wsa_squid TERM(87.194.216.51) src_ip=87.194.216.51
    • 예문에서 src_ip는 aliased field
  6. lookup field의 값에 major breakers가 포함되어 있으면 lispy 표현에 적용되지 않음

전체를 검색하는 *(wildcard)은 minor segment를 입력하여 구분해줘야 한다
so*do 적용 불가
so*.do 적용 가능

단, 메이저 분할 이후에 마이너 실행
검색 작업기의 search.log에 들어가면 lispy 표현으로 어떻게 분할 검색어가 적용되었는지 확인할 수 있음.

field summary

예문

sourcetype=access_* status IN (200,503)
| stats sum(price) as sales by status
| fieldsummary

필드의 산술통게 값을 확인

informational functions

데이터의 타입을 확인할 수 있는 명령어

isbool(field name) 참/거짓
isint(field name) 정수
isnotnull(field name) null 여부
isnum(field name) 실수
isstr(field name) 문자열
typeof(field name) 데이터 타입

ex)
sourcetype=access_* 
| eval TypeOfData = if(isnull(action), "Null", typeof(action))


action 필드의 값의 타입을 출력하고 없으면 "Null"을 대신 입력한 결과

profile
배운 건 써 먹자

0개의 댓글