[ Splunk Search ] 주식 프로젝트에 사용된 명령어 분석하기
본문 바로가기

Splunk/Splunk Search

[ Splunk Search ] 주식 프로젝트에 사용된 명령어 분석하기

728x90
반응형

🔆 오늘의 목표 🔆

     🪨 아래의 배열형 데이터를 독립된 열 데이터로 만들자!!

{
    "Sharpe": 0.49486577087259837, 
    "Returns": 0.09653658218825922, 
    "Risk": 0.19507629719072297, 
    "idx": 999, 
    "code": ["008770.KS", "010620.KS", "011170.KS", "024110.KS", "192820.KS"], 
    "rate": [0.027731564480966874, 0.056647087277405216, 0.5564385158412494, 0.0045145824210048, 0.35466824997937374], 
    "date": "2021-01-11"
}

 

 

     🪨 원하는 결과

 

index="monte" 
| head 1 
| rename code{} as codes
| rename rate{} as rates
| eval fields_value=mvzip(codes, rates)
| mvexpand fields_value
| eval fields_value = split(fields_value, ",")
| eval code = mvindex(fields_value, 0)
| eval rate = mvindex(fields_value, 1)
| rex field=code "^(?<code>\\d+).KS" 
| lookup kospi_200 code OUTPUT name 
| table date, idx, code, Sharpe, Returns, Risk, rate
  • 요 명령어를 뽀개보자!

 

 

🍀 head 🍀

  • 이력 검색의 경우 가장 최근의 이벤트 N개를 나타냄
  • 실시간 검색의 경우 가장 먼저 수집된 이벤트 N개를 나타냄

 

 

🍀 rename 🍀

  • 하나 이상의 필드 이름을 바꿀 수 있다.
  • 와일드카드 문자를 사용하여 이름이 유사한 필드의 이름을 바꿀 수 있다.

(좌) 전, (우) 후

 

 

🍀 eval 🍀

  • 식을 계산하고 결과 값을 검색 결과 필드에 넣는다.
    • 지정하는 필드 이름이 데이터에 없을 때, 검색 결과에 새 필드가 추가됨
    • 지정하는 필드 이름이 데이터에 있을 때, 해당 필드 값을 eval 식의 결과로 덮어씀
  • 숫자, 문자열 및 부울식을 평가한다.
  • 한 검색에서 쉼표를 사용해 여러 eval 식을 연쇄적으로 연결하여 이후의 식을 구분할 수 있음.
  • 검색에서는 여러 eval 식을 왼쪽에서 오른쪽 순으로 처리하므로,
    이후 식에서 이전에 평가한 필드를 참조할 수 있다.
  • eval에서 새로 생성된 필드는 관심 필드에서 확인할 수 있다.

 

 

☘️ eval 명령의 함수 : mvzip(X, Y, "Z") ☘️

  • 두 개의 다중값 필드( X, Y )를 사용하고 X의 첫 번째 값과  Y의 첫 번째 값,
    X의 두 번째 값과 Y의 두 번째 값을 연결하는 등의 방식으로 필드를 결합한다.
  • 세 번째 인수 Z는 선택 사항이며, 두 값을 조인하기 위한 구분자를 지정하는 데 사용
    기본값은 쉼표이다.

 

 

 

☘️ eval 명령의 함수 : split(X, "Y") ☘️

  • 이 함수는 두 개의 인수인 필드 X와 구분자 Y를 사용하고, X의 값을 구분자 Y로 구분하고 X를 다중값 필드로 반환

 

 

 

☘️ eval 명령의 함수 : mvindex(MVFIELD,STARTINDEX, ENDINDEX)☘️

  • 이 함수는 시작 및 종료 인덱스 값을 사용하여 다중값 필드의 부분 집합을 반환
    • MVFIELD: 다중값 필드 (필수) 
    • STARTINDEX: 숫자 (필수)
    • ENDINDEX: 숫자 (선택 사항)
  • 인덱스는 0부터 시작
  • STARTINDEX 인수만 지정된 경우 해당 값만 결과에 포함됨
  • ENDINDEX 인수가 지정된 경우 STARTINDEX부터 ENDINDEX까지의 값 범위가 결과에 포함됨
  • STARTINDEX와 ENDINDEX모두 음수일 수 있다. 
    • -1 인덱스는 리스트의 마지막 값을 지정하기 위해 사용
    • 인덱스가 범위를 벗어났거나 유효하지 않으면 NULL을 반환
| eval code = mvindex(fields_value, 0)
| eval rate = mvindex(fields_value, 1)

 

 

 

🍀 mvexpand 🍀

  • 다중값 필드의 값을 다중값 필드의 각 값에 대해 하나씩 개별 이벤트로 확장
  • 각 결과에 대해 mvexpand 명령어는 모든 다중값 필드에 대해 새 이벤트를 만든다.

 

 

 

🍀 rex 🍀

  • 이 명령어는 정규식 명명 그룹을 사용하여 필드를 추출하거나
    sed 식을 사용하여 필드의 문제를 바꾸거나 대체하기 위해 사용
  • 지정된 필드의 값을 고정되지 않은 정규식과 일치시키고,
    명명된 그룹을 해당 이름을 가진 필드로 추출
  • 훗날 자세하게 포스팅할 예정
| rex field=code "^(?<code>\\d+).KS"
  • 여기서는 기존 code field에서 나라 코드 ".KS"를 지워버린
    숫자로만된 code로 바꾸기 위해서 사용됨.

 

 

 

🍀 lookup 🍀

| lookup kospi_200 code OUTPUT name
  • kospi_200이라는 룩업 파일의 name이라는 필드를 우리가 가지고 있는 데이터의 code 필드랑 매핑해줘

 

  • 코드에 맞는 회사 이름이 잘 맵핑되어 들어간 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형