splunk/ 3. 현재 나의 현황 대시보드 생성

Algo rhythm·2022년 7월 12일
0

splunk

목록 보기
5/24

대시보드 생성

룩업(데이터에 대한 가독성 혹은 추가 설명을 위한 방식)

스플렁크의 모아진 데이터의 내용을 좀 더 알기 쉽게 해석할 수 있도록 도와주며 KVStore를 이용해 현재의 상태를 업데이트 하는데도 사용할 수 있다.

kospi_200.csv 파일을 이용하여 룩업 만듦. 윈도우 다운로드 폴더에 있는 걸 업로드함.

| inputlookup kospi_200.csv

룩업파일에 대한 조회 명령어
수집된 파일엔 코드만 존재하고 회사명이 없음, 따라서 편의를 위해 회사명을 연결해주는 룩업을 사용

룩업 - 정의 새로 만들기

index="kospi" Date="2020-12-30" | lookup name table code, Date, Close, Open, High, Low

해도 안됨 포기하고 넘어가서

이걸로 하면 됨 ↓

index=kospi Date="2020-12-30" 
| table code, Date, Close, Open, High, Low
| rex field=code "^(?<code>\d+).KS"
| lookup kospi_200 code OUTPUT name

출력 테이블을 생성하고 각 필드의 값을 출력
정규식을 활용하여 code 필드의 값 중 .KS를 제거한 값만 정장
kospi_200 룩업 정의에 따라 숫자만 남은 코드값을 읽어 name 출력

kv store 룩업 정의


_key : 해당 컬름을 구분하는 구분자로 히든컬럼 처리

kv store 룩업 정의 - 리눅스 파일 편집

vi /opt/splunk/etc/apps/stock/local/collections.conf

위의 디렉토리에 존재하는 collections.conf 파일 편집,
나의 디렉토리엔 해당 파일이 없어서 새로 만들게 됨

  • 2022-07-13 추가사항 vscode로 이것저것하다가 망치게 되었다
    특히 kv store 룩업부터 이후의 작업이 전부 사라져서 새로 만들었는데 이게 안되길래 찾다가 찾다가
vi /opt/splunk/etc/apps/stock/local/transforms.conf
  • 내부를 살펴본 결과 "[my_stock ]"으로 되어있음을 확인하고 수정함
    -> 제대로 동작함. 결국 마지막 띄어쓰기 때문에 인식이 안되던 거임

kv store 룩업 정의 - 가상의 주식 소유데이터

| makeresults 1 | eval code = "005930", share = 5, interest = 1
| eval _key = code
| outputlookup my_stock append=true override_if_empty=true

  • makeresults 1 => 가상의 데이터를 만들 때 사용
    삼성전자, 5주 소유, 관심대상
  • _key => key의 랜덤생성으로 업데이트에 문제 발생해서 미리 지정
  • outputlookup => kv store 에 저장하도록 함
  • append=true => 이어쓰기
  • override_if_empty=true => 업데이트를 위한 것

kv store 룩업 정의 - 결과 확인

| inputlookup my_stock | eval key = _key | table key, *


위의 명령어를 통해 가상의 데이터가 my_stock(kv store)에 저장된 데이터를 불러와 볼 수 있음

실습

my_stock(kv store) 데이터 출력

| inputlookup my_stock 
| map search="| readstock code=$code$ | spath 
    | eval share = $share$ 
    | table code, price, share " 
| eval asset = share * price
| lookup kospi_200 code OUTPUT name
| chart sum(asset) by name
  • | inputlookup my_stock
    => my_stock(kv store) 데이터를 불러온드
  • | map search="
    => 한번에 여러 종목을 불러오기 위한 map(앞의 조회문을 기반으로 병령로 검색문을 수행)
  • | readstock code=codecode | spath
    • | eval share = shareshare
    • | table code, price, share "
      => 코드를 값을 하나씩 읽어들이고 코드, 가격, 주식의 수를 출력
  • | eval asset = share * price
    => 그렇게 출력한 값들을 활용해 asset이라는 출력 필드(혹은 변수)를 생성
  • | lookup kospi_200 code OUTPUT name
    => kospi_200 코드와 연동하여 기업명 출력
  • | chart sum(asset) by name
    => asset 값의 합계를 차트로 출력

시각화

결과를 대시보드로 저장

결과를 기존 대시보드에 저장

대시보드 UI 편집

주식의 현재 가격 코드

| inputlookup my_stock 
| map search="| readstock code=$$code$$ | spath 
    | eval share = $$share$$ 
    | table code, price, share " 
| eval asset = price
| lookup kospi_200 code OUTPUT name
| chart sum(asset) by name

원본 코드 소스

<dashboard script="reset_tokens.js" version="1.1">
  <label>나의 자산</label>
   <!--- 추가되는 부분-->
  <search id="current_stock">
    <query>
         | inputlookup my_stock 
         | map search="| readstock code=$$code$$ 
                                 | spath 
                                 | eval share = $$share$$ 
                                 | table code, price, share " 
    </query>
  </search>
  <!--- 여기까지-->
  <row>
    <panel>
      <title>나의 자산 현황</title>
      <single>
        <search base="current_stock">
          <query> eval asset = share * price
| lookup kospi_200 code OUTPUT name
| chart sum(asset) by name</query>
        </search>
        <option name="colorBy">value</option>
        <option name="colorMode">block</option>
        <option name="drilldown">all</option>
        <option name="numberPrecision">0</option>
        <option name="rangeColors">["0x118832","0x1182f3","0xcba700","0xd94e17","0x118832"]</option>
        <option name="rangeValues">[0,30,70,100]</option>
        <option name="showSparkline">1</option>
        <option name="showTrendIndicator">1</option>
        <option name="trellis.enabled">1</option>
        <option name="trellis.scales.shared">1</option>
        <option name="trellis.size">medium</option>
        <option name="trellis.splitBy">name</option>
        <option name="trendColorInterpretation">standard</option>
        <option name="trendDisplayMode">absolute</option>
        <option name="unitPosition">after</option>
        <option name="useColors">1</option>
        <option name="useThousandSeparators">1</option>
        <drilldown>
          <set token="stock_code">$trellis.value$</set>
        </drilldown>
      </single>
    </panel>
    <panel>
      <title>현재 주식 가격</title>
      <single>
        <search base="current_stock">
          <query> lookup kospi_200 code OUTPUT name 
| chart sum(price) by name</query>
        </search>
        <option name="colorBy">value</option>
        <option name="colorMode">block</option>
        <option name="drilldown">all</option>
        <option name="numberPrecision">0</option>
        <option name="rangeColors">["0x53a051","0x0877a6","0xf8be34","0xf1813f","0xdc4e41"]</option>
        <option name="rangeValues">[0,30,70,100]</option>
        <option name="refresh.display">progressbar</option>
        <option name="showSparkline">1</option>
        <option name="showTrendIndicator">1</option>
        <option name="trellis.enabled">1</option>
        <option name="trellis.scales.shared">1</option>
        <option name="trellis.size">medium</option>
        <option name="trendColorInterpretation">standard</option>
        <option name="trendDisplayMode">absolute</option>
        <option name="unitPosition">after</option>
        <option name="useColors">1</option>
        <option name="useThousandSeparators">1</option>
        <drilldown>
          <set token="stock_code">$trellis.value$</set>
        </drilldown>
      </single>
    </panel>
  </row>
 </dashboard>

중복 코드 정리

profile
배운 건 써 먹자

0개의 댓글