[ Splunk Project ] Splunk둜 주식 뢄석 | Phase 3. ν˜„μž¬ λ‚˜μ˜ ν˜„ν™© λŒ€μ‹œλ³΄λ“œ λ§Œλ“€κΈ°
λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Splunk/Splunk Project

[ Splunk Project ] Splunk둜 주식 뢄석 | Phase 3. ν˜„μž¬ λ‚˜μ˜ ν˜„ν™© λŒ€μ‹œλ³΄λ“œ λ§Œλ“€κΈ°

728x90
λ°˜μ‘ν˜•

πŸ”† 였늘의 핡심 λ‚΄μš© πŸ”†

        룩업 λ§Œλ“€κΈ°μ— 살짝 곁듀여진 λŒ€μ‹œλ³΄λ“œ λ§Œλ“€κΈ°

 

πŸ”† λ£©μ—…이 뭐가 쒋은디!? πŸ”†

          Splunk의 λͺ¨μ•„진 λ°μ΄ν„°μ˜ λ‚΄μš©μ„ μ’€ 더 μ•ŒκΈ° μ‰½κ²Œ 해석할 수 μžˆλ„λ‘ 도와쀄 뿐만 μ•„λ‹ˆλΌ,

          KVStoreλ₯Ό μ΄μš©ν•΄ ν˜„μž¬μ˜ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈ ν•˜λŠ”λ°λ„ μ‚¬μš©ν•  수 μžˆλ‹€.

 

πŸ”† λ£©μ—…μ˜ μ’…λ₯˜ πŸ”†

        β–ͺ️   νŒŒμΌ 룩업

        β–ͺ️   KV Store 룩업

 

 

 

 

 

1. 파일 룩업 λ§Œλ“€κΈ°

μ•„λž˜μ˜ kospi_200.csv νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ 룩업을 λ§Œλ“€μž!

kospi_200.csv
0.01MB

 

μ„€μ •μ—μ„œ 룩업을 클릭

룩업 ν…Œμ΄λΈ” νŒŒμΌμ—μ„œ μƒˆλ‘œ 생성 클릭

νŒŒμΌμ„ μ„ νƒν•˜κ³  룩업 이름을 μž…λ ₯

​

κ²€μƒ‰μ—μ„œ λ‹€μŒμ„ μ‹€ν–‰ν•˜λ©΄ ν•΄λ‹Ή 룩업 νŒŒμΌμ— λŒ€ν•΄μ„œ μ‘°νšŒν•  수 μžˆλ‹€.

| inputlookup kospi_200.csv

μš°λ¦¬κ°€ μˆ˜μ§‘ν•œ νŒŒμΌμ—λŠ” μ½”λ“œλ§Œ 있고 νšŒμ‚¬λͺ…이 쑴재 ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 편의λ₯Ό μœ„ν•΄μ„œ

μ½”λ“œμ™€ νšŒμ‚¬λͺ…을 μ—°κ²°ν•΄ μ£ΌλŠ”λ° 룩업을 μ‚¬μš©ν•  것이닀.

μ‹€μ œ 데이터와 룩업을 μ•„κΈ° μœ„ν•΄μ„œλŠ” ν•œ 가지 μž‘μ—…μ΄ 더 ν•„μš”ν•˜λ‹€.

 

μ„€μ • > 룩업

Add New (μƒˆλ‘œ 생성) 클릭

 

파일 기반의 λ£©μ—…μœΌλ‘œ 생성

​

자 μ΄λ ‡κ²Œ μ €μž₯ν•˜κ²Œ 되면 룩업을 μ‚¬μš©ν•  수 있게 λ˜μ—ˆλ‹€.

index = "kospi" Date="2023-06-12" 
| lookup kospi_200 code OUTPUT name
| table code, name, Date, Close, Open, High, Low

 

🍬 룩업을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ : name fieldκ°€ μ—†μŒ

 

index=kospi Date="2023-06-12" 
| lookup kospi_200 code OUTPUT name
| table name, code, Date, Close, Open, High, Low

룩업 λͺ…λ Ήμ–΄λŠ” λ‹€μŒμ²˜λŸΌ

  • "kospi_200" 룩업 이름
  • λ³Έ ν…Œμ΄λΈ”κ³Ό 맀칭할 ν•„λ“œ λͺ… "code"
  • lookup ν›„ μΆ”κ°€ν•  ν•„λ“œ λͺ…λ“€ "name" 둜 κ΅¬μ„±λœλ‹€.

 

🍬 λ£©μ—…을 μ‚¬μš©ν•  λ•Œ :  name fieldκ°€ 있음

 

 

 

2.  KV Store 룩업 λ§Œλ“€κΈ°

λ£©μ—…μ—λŠ” 파일 룩업 말고도  kvstore 룩업도 μžˆλ‹€.

이것도 ν•œ 번 μ‹€μŠ΅ν•΄λ³΄μž.

λ‹€μ‹œ μ„€μ • > λ£©μ—…μœΌλ‘œ λ“€μ–΄κ°€μ„œ

μ΄λ²ˆμ—λŠ” 룩업 ν…Œμ΄λΈ” 파일 μ—…λ‘œλ“œ κ³Όμ • 없이

λ°”λ‘œ 룩업 μ •μ˜λ₯Ό λ§Œλ“ λ‹€.

룩업 μ •μ˜μ˜ μƒˆλ‘œ μΆ”κ°€λ₯Ό 클릭

λ‹€λ₯Έ 뢀뢄은 λ‹€ λΉ„μŠ·ν•˜κ²Œ 섀정을 ν•˜κ³ , νƒ€μž…μ€  KV Store 둜 μ„ νƒν•œλ‹€.

그리고 ν•„λ“œ ν•­λͺ©λ“€μ„ λ„£μž.

_keyλŠ” 해달 μ»¬λŸΌμ„ κ΅¬λΆ„ν•˜λŠ” κ΅¬λΆ„μžλ‘œ νžˆλ“  컬럼으둜 처리됨

μ—¬κΈ°μ—λŠ” λ‚˜μ˜ 주식 λ³΄μœ μ‚¬ν•­λ“€μ„ κΈ°λ‘ν•˜λŠ”λ° μ‚¬μš©ν•  μ˜ˆμ •μ΄λ‹€.

νžˆμŠ€ν† λ¦¬ ν˜•νƒœλ‘œ 남기지 μ•Šκ³  ν˜„μž¬ μƒνƒœλ₯Ό κ³„μ†ν•΄μ„œ μ—…λ°μ΄νŠΈ ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€.

λ˜ν•œ 주식을 λ³΄μœ ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ κ΄€μ‹¬μžˆλŠ” ν•­λͺ©μœΌλ‘œ μ„€μ •ν•˜κΈ° μœ„ν•΄μ„œ "interest" μΉΌλŸΌλ„ μΆ”κ°€ν–ˆλ‹€.

 

λ‚˜λ§Œ μ‚¬μš©ν•˜λŠ” μ‹œμŠ€ν…œμ΄λΌ μ‚¬μš©μž ꡬ뢄은 μƒλž΅ν•¨.

 

KV_store λ₯Ό μ‚¬μš©ν•˜κΈ°μœ„ν•΄μ„œλŠ” κ°„λ‹¨ν•˜μ§€λ§Œ μ•½κ°„μ˜ 번거둜운 μž‘μ—…μ΄ μΆ”κ°€μ μœΌλ‘œ ν•„μš”ν•˜λ‹€.

μŠ€ν”Œλ ν¬μ˜ μ•±(stock)의 local λ””λ ‰ν† λ¦¬μ—μ„œ collections.conf λ₯Ό μˆ˜μ •ν•΄μ•Ό ν•œλ‹€.

$ vi $SPLUNK_HOME/etc/apps/stock/local/collections.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λŠ” κ°€μƒμ˜ 데이터λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•œλ‹€.

005930(μ‚Όμ„±μ „μž) μ£Όμ‹μœΌλ‘œ 5μ£Ό μ†Œμœ ν–ˆκ³  κ΄€μ‹¬μ£Όλ‘œ λ“±λ‘ν•œλ‹€.

이 λ•Œ _keyλ₯Ό λ§Œλ“€μ–΄ 주지 μ•ŠμœΌλ©΄ keyκ°€ 랜덀으둜 μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— λ‚˜μ€‘μ— μ—…λ°μ΄νŠΈκ°€ λ˜μ§€ μ•ŠλŠ”λ‹€.

λ”°λΌμ„œ λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν•΄μ£ΌλŠ” 것이 μ’‹λ‹€.

그리고 μ΅œμ’… 정보λ₯Ό "outputlookup" λͺ…령을 μ΄μš©ν•΄ kv_store에 μ €μž₯ν•œλ‹€.

 

μ €μž₯ μ‹œ μ£Όμ˜ν•  점

λ°˜λ“œμ‹œ append=true둜 ν•΄μ•Όν•œλ‹€.

그렇지 μ•ŠμœΌλ©΄ κΈ°μ‘΄ λ‚΄μš©μ„ λͺ¨λ‘ μ‚­μ œν•˜κ²Œ λœλ‹€.

그리고 μ—…λ°μ΄νŠΈλ₯Ό μœ„ν•΄μ„œ "override_if_empty"도 true둜 μ„€μ •ν•œλ‹€.

 

이런 ν˜•νƒœλ‘œ μž…λ ₯ν•˜κ²Œ 되고 λ‚˜μ€‘μ—λŠ” 주식을 사고 νŒ” λ•Œ λ°”λ‘œ μ—…λ°μ΄νŠΈ λ˜λ„λ‘ μžλ™ν™” ν•˜μž.

 

λΉ„μŠ·ν•œ 정보λ₯Ό ν•˜λ‚˜ 더 μž…λ ₯ν•˜κ² λ‹€.

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

 

μž…λ ₯이 λλ‚˜λ©΄ λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ μ‘°νšŒν•  수 μžˆλ‹€.

 

 

이제 μ€€λΉ„κ°€ 끝났닀. 이제 화면을 λͺ‡ 개 λ§Œλ“€μ–΄ 보자.

μš°μ„  μ§€κΈˆ μž…λ ₯된 주식을 λ°”νƒ•μœΌλ‘œ ν˜„μž¬ λ‚΄ μžμ‚°μ˜ μƒνƒœλ₯Ό μ²΄ν¬ν•œλ‹€.

 

ν˜„μž¬ μžμ‚°μ΄κΈ° λ•Œλ¬Έμ— 2λΆ€μ—μ„œ λ§Œλ“€μ–΄ 놓은 readstock λͺ…령을 μ‚¬μš©ν•˜μž.

 

| 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

μ—¬κΈ°μ—μ„œ μ‚¬μš©ν•œ λͺ…령은 map λͺ…령이닀.

readstock은 ν•œ 개의 μ’…λͺ©λ§Œ μ‘°νšŒν•  수 μžˆλŠ”λ° my_stock에 μžˆλŠ” 것을 일일히 μ‘°νšŒν•˜λŠ” 것은 ITμΈμœΌλ‘œμ„œ ν•  일이 μ•„λ‹ˆλ‹€.

map λͺ…령은 μ•žμ— μ‘°νšŒν•œ λ‚΄μš©μ„ 기반으둜 λ³‘λ ¬λ‘œ 검색문을 μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

ν˜„μž¬κ°€λ₯Ό μ‘°νšŒν•œ λ‚΄μš©μ„ 기반으둜 λ‚΄κ°€ λ³΄μœ ν•œ 주식 수λ₯Ό κ³±ν•΄μ„œ λ‚˜μ˜ μžμ‚°μ„ κ³„μ‚°ν•œλ‹€.

 

그리고 "chart" λͺ…령을 μ΄μš©ν•΄ 보기 μ’‹κ²Œ λ§Œλ“€μ–΄ μ€€λ‹€.

μ˜€μž‰?? γ…‡.γ…‡

μ™œ μ’…λͺ©μ΄ ν•˜λ‚˜λ°–μ— μ•ˆ λ‚˜μ™€!

μ•Œκ³ λ³΄λ‹ˆ kospi200.csv 에 ν¬ν•¨λœ μ’…λͺ©μ΄ μ•„λ‹ˆλΌμ„œ κΈ°μ‘΄ νŒŒμΌμ— μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜λ˜ 것!

이럴 땐 룩업 에디터λ₯Ό μ‚¬μš©ν•˜μ—¬ 룩업을 μˆ˜μ •ν•  수 μžˆλ‹€!

룩업 μ—λ””ν„°λŠ”  Splunkμ—μ„œ enterprise μ‚¬μš©μžμ—κ²Œ 무료둜 μ œκ³΅ν•˜λŠ” 앱이닀.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

μ—¬κΈ°μ„œ 확인할 수 있고 μ—†λ‹€λ©΄

+ Find More Apps 둜 λ“€μ–΄κ°€μ„œ 

λ‹€μš΄λ‘œλ“œ λ°›μœΌλ©΄ λœλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kospi λ₯Ό κ²€μƒ‰ν•˜μ—¬ 클릭
λ§ˆμ§€λ§‰ 행에 λ‹€μŒ 정보λ₯Ό μž…λ ₯ν•œ ν›„ save lookup 클릭

 

이제 됐닀!

 

이제 μ‹œκ°ν™” νƒ­μœΌλ‘œ μ΄λ™ν•΄μ„œ 이λ₯Ό "single value" 둜 보여주고 "Trellis" λ₯Ό μ΄μš©ν•΄ μ’…λͺ©λ³„λ‘œ λΆ„λ¦¬ν•΄μ„œ ν‘œμ‹œν•œλ‹€.

 

포맷 뢀뢄은 μ—¬λŸ¬κ°€μ§€ 눌러보고 κ°€μž₯ 이뻐 λ³΄μ΄λŠ” 걸둜 μ„ νƒν•œλ‹€.

ν˜„μž¬ 보유 μžμ‚°μ€ λ‹€μŒκ³Ό 같이 평가 λœλ‹€. 

이제 이 차트λ₯Ό λŒ€μ‹œλ³΄λ“œλ‘œ λ§Œλ“€μ–΄μ„œ κΆκΈˆν•  λ•Œ λ§ˆλ‹€ κΊΌλ‚΄ 보자.

 

 

Save As의 New Dashboard 클릭

 

ν•„μš”ν•œ 뢀뢄을 μž…λ ₯ν•˜κ³  μ €μž₯ 

였λ₯˜ λ°œμƒ...

우츑 μƒλ‹¨μ˜ 빨간색 μ„Έλͺ¨λ₯Ό ν΄λ¦­ν•œλ‹€.

 

 

어쨋든 λŒλ¦¬κ² λ‹€κ³  Run Query Anywayλ₯Ό 클릭

 

μ§œμžμž”~~ 첫 화면이 λ§Œλ“€μ–΄ μ‘Œλ‹€.

같은 λ°©λ²•μœΌλ‘œ ν˜„μž¬ 주식 가격도 λ§Œλ“€μ–΄μ„œ μ €μž₯ν•œλ‹€.

| 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

같은 λ°©λ²•μœΌλ‘œ λ§Œλ“€μ–΄μ„œ μ΄λ²ˆμ—λŠ” μƒˆλ‘œμš΄ λŒ€μ‹œλ³΄λ“œκ°€ μ•„λ‹Œ 기쑴의 λŒ€μ‹œλ³΄λ“œμ— μ €μž₯ν•œλ‹€.

기쑴에  λ§Œλ“  λŒ€μ‹œλ³΄λ“œμ— μΆ”κ°€

μ΄λ ‡κ²Œ 두 κ°œκ°€ λ§Œλ“€μ–΄ μ‘Œλ‹€.

그런데 거의 같은 쿼리인데 각 νŒ¨λ„λ§ˆλ‹€ λ˜μ§€λŠ” 것은 λ­”κ°€ λΉ„νš¨μœ¨μ μΈ 것 같은 직감이 λ“ λ‹€.

 

λŒ€μ‹œλ³΄λ“œμ˜ νŽΈμ§‘ λ²„νŠΌμ„ ν΄λ¦­ν•œ ν›„ "Source"λ₯Ό ν΄λ¦­ν•œλ‹€.

ν™”λ©΄ UIλ₯Ό κ΅¬μ„±ν•˜λŠ” XML 파일이 좜λ ₯λ˜λŠ”λ°, μ—¬κΈ°μ—μ„œ μ€‘λ³΅λ˜λŠ” 검색을 μ œκ±°ν•  것이닀.

<dashboard>
  <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>
...

μ—¬κΈ°μ—μ„œ λ‹€μŒμ²˜λŸΌ μ•žμ— <search> νƒœκ·Έλ₯Ό μΆ”κ°€ν•˜κ³  κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜κ²Œ λ˜λŠ” 검색문을 λ§Œλ“€μ–΄ λ„£λŠ”λ‹€. 그리고 검색문에 λŒ€ν•œ idλ₯Ό ν• λ‹Ήν•΄ μ€€λ‹€. 기쑴이 $<λ³€μˆ˜λͺ…>$ 이 뢀뢄은 ν•˜λ‚˜κ°€ 더 μΆ”κ°€λœ $$<λ³€μˆ˜λͺ…>$$ 이 된 것에 μ£Όμ˜ν•˜μž. λŒ€μ‹œλ³΄λ“œμ—μ„œ $<λ³€μˆ˜λͺ…>$ 은 이미 λŒ€μ‹œλ³΄λ“œμ˜ λ³€μˆ˜λ₯Ό μž…λ ₯ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ˜κ³  μžˆμ–΄μ„œ SPL μƒμ˜ $<λ³€μˆ˜λͺ…>$ κ°€ $$<λ³€μˆ˜λͺ…>$$ 이 λ˜κ²Œλœλ‹€.

λ³€κ²½ κ²°

​

# 기쑴 ꡬ문
...      
<title>λ‚˜μ˜ μžμ‚° ν˜„ν™©</title>
      <single>
        <search> <-- base 속성 μΆ”κ°€
          <query>| 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</query> <-- μ—¬κΈ° λ³€κ²½
          <earliest>0</earliest>  <-- μ—¬κΈ° μ‚­μ œ
          <sampleRatio>1</sampleRatio> <--μ—¬κΈ° μ‚­μ œ
        </search>
...
# λ³€κ²½ ν›„
      <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>
# ν˜„μž¬ 주식 가격 λ³€κ²½ ν›„
      <title>ν˜„μž¬ 주식 가격</title>
      <single>
        <search base="current_stock">
          <query> lookup kospi_200 code OUTPUT name
| chart sum(price) by name</query>
        </search>
...

μ΄λŠ” base둜 μ„€μ •ν•œ 쿼리가 ν•œ 번 μ‹€ν–‰ 되고, 

이 κ²°κ³Όλ₯Ό 기반으둜 μ•„λž˜μ— μžˆλŠ” 쿼리듀이 μˆ˜ν–‰λ˜κ²Œ ν•΄μ£ΌκΈ° λ•Œλ¬Έμ—

검색 속도에 λŒ€ν•œ ν–₯상을 κ°€μ Έλ‹€ μ£Όκ³  넀이버에 λŒ€ν•œ 뢀담도 쀄어듀 것이닀.(URL 4번 호좜이 2번으둜 μ€€λ‹€.)

 

νŽΈμ§‘ λͺ¨λ“œμ— μžˆλŠ” 김에 μ•½κ°„μ˜ UI도 μ •λ¦¬ν•΄μ„œ λ‹€μŒκ³Ό 같은 λͺ¨μŠ΅μœΌλ‘œ λ§Œλ“€μ—ˆλ‹€.

<row>
	<panel>
		...
	</panel>
	<panel>
		...
	</panel>
</row>

μš”λŸ° ν˜•νƒœλ‘œ λ„£μœΌλ©΄ ν•œ 쀄에 λ“€μ–΄κ°„λ‹€.

728x90
λ°˜μ‘ν˜•