iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 23
0
Elastic Stack on Cloud

Elastic 戰台股系列 第 23

[Day23] 每日收盤資料更新 using Logstash (2) - http_poller plug-in

昨天我試了 file plug-in 把一筆存在本機的 JSON 格式的收盤資訊打上 ES Cloud。今天要抓真實事件的資料啦!

資料來源

日收盤資料的更新來源在這裡。先看看資料的長相:
https://ithelp.ithome.com.tw/upload/images/20201007/20129624oipnMIIqmh.png
所以有幾件事要做:

  1. 想辦法讓 Logstash 把資料拉下來
  2. Data 欄位是一個 JSON Array,內部的 JSON Object 就是當日收盤資訊,明顯跟 Index Mapping 的格式不合,資料需要轉化。

http_poller

前幾天提過,Logstash 可以接的資料來源很廣泛, HTTP 就是其中一個,我們可以透過 http_poller 插件來達成。直接看一個範例:

input {
   http_poller {
      urls => {
         urlname => "https://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL"
      }
      request_timeout => 20
      schedule => { every =>"60s"}  
      codec => "json"
   }
}

來檢視一下 http_poller 的配直選項 (configuration option):

  • urls: 必填欄位,value type 為 hash 型式,所謂的 hash 是指 "field1" => "value1" 格式組成的資料 型式。以上面的範例來說,就是 "name" => "https://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL" 。其中 name 和 網址會被帶在輸出的事件。
  • requeset_timeout: 預設值為 60 秒,為整個 request 的 timeout.
  • schedule: value 為 hash。重覆執行的週期時間。
  • codec: 指定用來 decode 輸入資料的 codec
    先不做任何處理,來看看輸出的結果:
    https://ithelp.ithome.com.tw/upload/images/20201008/201296247fNNSOT12t.png

資料處理

透過原始資料格式,我發現了一個讓我在設計 Filter 上一直卡關的問題,就是在 Data 欄位對應的資料是 Arrays in Array,而非 JSON Object array。翻遍了網路上的教學,我始終無法用一些簡單的 Filter 插件,透過配置,轉化成符合 ES Index Mapping 的 JSON 格式。
但我仿佛看到一個希望,就是透過 ruby filter 插件,但這輩子沒寫過 Ruby ,真是坑爹,今天只好先探索一下,明天再補上這部分了…

明天,我一定補上如何克服這一關的文章。


上一篇
[Day22] 每日收盤資料更新 using Logstash (2) - file plug-in with JSON
下一篇
[Day24] 每日收盤資料更新 using Logstash (3) - Ruby filter plugin
系列文
Elastic 戰台股30

尚未有邦友留言

立即登入留言