Splunk 의 커맨드 유형, Commands Type

Munang·2022년 8월 8일
4

splunk

목록 보기
3/57
post-custom-banner

오늘은 splunk의 commands 유형에 대해 알아볼 것이다.
마찬가지로 참고한 사이트는 2가지 이다.
유튜브 채널
공식 홈페이지

별거 아닌 것 같은 개념이지만, splunk에서 다양한 명령어를 사용하고 처리할 때 이 개념을 모르면 제대로 적용하기 어려워진다. 어떤 명령어를 적용했을때 이 명령어는 어떤 타입에만 사용이 가능하고, 이 명령어는 어떨 때에만 사용이 가능하다 라는 식의 에러 메세지를 만나게 된다.

미리 이 개념을 숙지해두면 빠르게 원인을 파악하고, 상황에 맞는 명령어를 적절하게 고를 수 있다.

1. Splunk Command Type

splunk의 명령어는 크게 총 6가지 타입으로 나뉘어진다.

  • streaming
  • non-streaming
  • distributable streaming
  • centralized streaming
  • transforming
  • generating
  • orchestrating
  • dataset processing

하나의 커맨드가 여러개의 타입을 가질 수 있고, 어떤 커맨드는 하나의 타입을 가질 수도 있다.

1. Streaming command vs Non Streaming command

  • streaming command
    스트리밍 명령은 검색에서 반환되는 각 이벤트에 대해서 작동한다. 기본적으로 하나의 이벤트가 들어오면 하나의 결과가 나오게 된다.
    splunk에서 streaming의 의미가 어려울 수 있다. 말 그대로 스트리밍된다 라고 생각하면 쉽다. 보통 우리가 스트리밍 서비스 라고 말한다면 끊기지 않는 서비스 라고 생각한다. 말 그대로 이다. 명령어를 사용했을 때 끊기지 않고 새로 들어오는 명령어를 받아서 바로바로 처리하는 형태를 가진 명령어를 streaming 명령어 라고 생각하면 된다.

    예를들어 이런 eval 명령어를 사용하게 되면, 다른 이벤트를 전혀 고려하지 않고 단순히 순서대로 들어오는 이벤트에 대해서 새로운 full_name 필드를 생성한다.
| eval full_name = first_name." ".last_name
  • Non streaming command
    예를들어 sort 명령을 예로 들자, 우리가 데이터를 정렬하려면 전체 데이터 중에서 가장 작은 데이터와 가장 큰 데이터를 알아야 하고 나머지 데이터들의 대소관계를 알아야 한다. 즉 전체 데이터를 탐색해야 하고, 그렇기 때문에 전체 이벤트가 필요하다.
    말 그대로 streaming하지 않은 명령어라고 생각하면 된다.

    이러한 명령어를 non streaming command 라고 한다.

2. StreamingCommand - distributable streaming

스트리밍 명령은 검색에서 반환된 각 이벤트에 대해 작동하는데, 2가지 타입이 있다. 첫번째가 distributable streaming 명령이다. 이 명령어는 인덱서에서 실행할 수 있는 명령이다.
즉, 서치헤더에서 별도의 처리를 하지 않고 인덱서에서 바로 데이터를 끌어올 때마다 해당 명령어를 적용해 서치헤더로 전달이 가능하다는 의미이다.

  • 특징
  • 순서가 중요하지 않다. 단순히 추가적인 필드를 보여주거나, 필터링을 해주는 개념이기 때문에 순서가 중요하지 않다.
  • 인덱서에서 바로 실행이 가능하기 떄문에 프로세스 속도부분에서 향상된다.
  • 실행 순서
  • distributable streaming 명령 이전의 모든 명령을 인덱서에서 실행할 수 있는 경우 distributable streaming 명령은 인덱서에서 실행됩니다.
  • distributable streaming 명령 앞의 명령 중 하나가 검색 헤드에서 실행되어야 하는 경우 검색의 나머지 명령은 검색 헤드에서 실행 되어야 한다. 검색 처리가 검색 헤드로 이동하면 인덱서로 다시 이동할 수 없다.
  • distributable streaming 명령은 인덱싱된 데이터의 하위 집합에 병렬식으로 적용된다. 쉽게 말해 그냥 바로 이벤트로 보여줄 수 있다는 의미이다. 예를 들어 rex명령은 스트리밍 명령어로, 필드를 추출하여 검색 시 이벤트에 추가하여 바로바로 결과로 보여줄 수 있다.
  • 명령어
    distributable streaming 명령 중 일부는 eval , fields , makemv , rename , regex , replace , strcat(2개 이상의 문자열 필드를 연결한다) , typer(지정된 이벤트 타입 유형과 일치하는 검색 결과의 이벤트 타입 계산을 한다.) 및 where 이다.
  • 참고사항
  • 내 경험상 2유형 타입의 명령어는 인덱서에서 바로 적용되어서 가져오기 때문에
    속도, 부하에 영향을 덜 주게 된다.

3. StreamingCommand - centralized streaming

centralized streaming 명령어는 검색에서 반환된 이벤트에 각각 명령어를 적용한다. 또한, 2와는 다르게 3의 명령어는 검색헤더에서 작동된다. (속도나 SH부하를 고려해야 된다.)

  • 특징
  • 각각의 이벤트를 모두 SH에서 작동한 후 리턴한다.
  • 이벤트의 순서가 고려된다.
  • 오직 SH 검색 헤더에서만 작동된다.
  • 명령어
    cluster, head, streamstats, dedup

4. transforming

변환 명령은 검색 결과를 테이블로 만들어준다. 이 명령어는 splunk를 사용하는 유저라면 아마 가장 많이 사용하는 명령어가 아닐까 싶다. 각 이벤트에 대해 지정된 필드 값을 splunk가 통계적으로 사용하기 위해 숫자로 변환하게 된 후, 우리가 보는 통계값이나 최빈값, 최소값 등을 확인할 수 있다.

또한, 차트를 확인하기 위해 데이터 구조를 변환하기 위한 변환 명령에도 사용된다.

  • 특징
  • non-streaming 하다.
  • 검색 결과는 모두 시각화를 하기 위한 데이터 구조로 변경이 된다.
  • 입력은 이벤트지만, 출력은 데이터 테이블 형태이다.
  • 명령어
  • chart , timechart , stats , top , rare, addtotals(통계 탭에서 모든 필드의 산술 합계를 추출한다)

5. generating

생성 명령은 그대로 인덱스에서 정보를 가져온다. 생성 명령은 distributable 하거나
centralized 할 수 있다. 즉, 인덱서에서 바로 가져오거나 SH에서 처리할 수도 있다. 대부분의 보고서가 centralized 하다.

일반적으로 생성명령을 사용하게 되면 검색 시작과 함께 선행 파이프라인이 함께 호출된다.
(예외사항으로는 그냥 search가 있다.(너무 암시적으로 명확해서 호출을 안하는 것임)

  • 특징
  • 데이터를 가져올때 인덱서에서 가져오며 어떠한 변환도 거치지 않는다.
  • 보통은 데이터를 새로 생성할때 많이 사용된다. (이벤트를 생성하거나, 보고서를 만들어내거나)
  • 명령어(생소한 명령어 임으로, 간략하게 설명한다.)
  • dbinspect: 지정된 인덱스의 버킷에 대한 정보를 반환
  • datamodel: datamodel모든 또는 지정된 데이터 모델 및 해당 데이터 세트에 대한 JSON을 반환
  • inputcsv: Splunk Enterprise 배포의 경우 수정되지 않은 지정된 .csv 파일에서 검색 결과를 로드
  • metadata: metadata명령은 지정된 인덱스 또는 분산 검색 피어에서 소스, 소스 유형 또는 호스트 목록을 반환. 이 metadata명령은 시간이 지남에 따라 누적된 정보를 반환합니다. 시간 범위 선택기를 사용하여 지난 7일과 같은 특정 기간 동안의 인덱스 스냅샷
  • pivot
  • search
  • tstats: tsidx 파일 tstats의 인덱싱된 필드에 대한 통계 쿼리를 수행 한다. 인덱싱된 필드는 인덱싱된 데이터 또는 가속화된 데이터 모델에서 가져올 수 있다. 원시 이벤트 대신 인덱스 시간 필드를 검색하기 때문에 tstats명령이 stats 명령보다 빠르다.

6. orchestrating

오케스트레이션 명령 은 검색이 처리되는 방식의 일부 측면을 제어하는 명령이다. 검색의 최종 결과 집합에 직접적인 영향을 미치지 않는다. 예를 들어, 전체 검색을 더 빨리 완료하는 데 도움이 되는 검색 최적화를 활성화 또는 비활성화하기 위해 검색에 오케스트레이션 명령을 적용할 수 있다.

말 그대로 검색하는 과정에 개입을 해서 처리되는 방식을 지휘하기 때문에, 오케스트레이팅 명령어라고 불리우는 이유이다.

  • 명령어
  • redistribute: 대용량 집계 데이터를 추출할때 Splunk에서는 일반적으로 커맨드 실행 시, 맵-리듀스(데이터를 관련 있는 데이터끼리 묶는 작업을 통해서 임시 데이터 집합으로 변형 - 맵 작업에서 생성된 임시 데이터 집합에서 중복 데이터를 제거하고 원하는 데이터를 추출하는 작업을 진행) 과정으로 요약되는데,
    이때 맵-리듀스-리듀스 방식으로 프로세스를 만들어 주는 명령어이다. 이렇게 하려면, 기존 인덱서가 중간 리듀서로 작동하도록 구성이 되어있어야 한다.
  • noop: 디버그할 수 있도록 하는 명령어, 추가로 검색 최적화를 활성화 할 수 있다.
    (한번도 사용하지는 않았는데.. 사용해봐야겠다!!)

7. dataset processing

명령을 실행하려면 전체 데이터 세트가 필요한 몇 가지 명령이 있다. 이러한 명령을 데이터세트 처리 명령이라고 한다. 이러한 명령은 변환하지 않고, 배포할 수도 없고, 스트리밍하지도 않고, 오케스트레이션하지도 않는다.

  • 특징
  • 이러한 명령어를 실행 시키려면, 전체 데이터 셋을 요구한다.
  • 명령어
  • sort , eventstats 및 일부 cluster , dedup(동시에 streaming 커맨드이기도 하다) 및 fillnull

+) 여기에 추가로 Customcommand 가 있는데, 이 또한 7가지 유형에 포함되도록 명령어를 만드는 기법 중에 하나로 생각돼서 따로 포스팅 하도록 하겠다.

오늘은 여기까지

post-custom-banner

0개의 댓글