iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 22
0
Elastic Stack on Cloud

Elastic 戰台股系列 第 22

[Day22] 每日收盤資料更新 using Logstash (2) - file plug-in with JSON

今天來理解一下 Logstash 的基本用法,目標是把一個在本地端資料夾的 JSON 格式的股票盤後資訊,放到 ES Cloud。我們出發吧!

配置檔的所在

Logstash 是一套軟體,要讓它照我們想要的方式運作,就必須告訴它怎麼做,在 Logstash 的設計中,使用者是透過配置檔進行溝通。從官方文件的提示找到配置檔的存放位置:
https://ithelp.ithome.com.tw/upload/images/20201006/20129624jZTuW0TK3s.png
在這個資料夾下,建立一個副檔名為 conf 的配罝檔:
https://ithelp.ithome.com.tw/upload/images/20201006/20129624f7R3w4RRyi.png
開始編輯它吧。

配置檔的結構

conf 檔的內容包含三個部分:

input {
  ...
}

filter {
  ...
}

output {
  ...
}

input, filter 以及 output 分別代表三種不同類型的插件 (plug-in) 的配置區塊,它們三人組成了 Logstash 的事件處理管道 (pipeline)。
-input: 產生事件
-filter: 將事件進行轉換,處理成我們想要的格式
-output: 將事件送往別處存放 (stash),如 Elasticsearch.
所以我們可以這樣理解,玩轉 Logstash,就是組裝不同的 plug-in 來達成目的。

編輯配置檔

我在 home 目錄下放了一個 sample-stock.json 檔:

{"stock_id" : "1101","date" : "2020-09-23","volume" : 3.47E7,"open" : 41.8,"high" : 41.8,"low" : 40.9}

要把這個檔案的內容放到 ES Cloud 中。

input plug-in

首先,我們必須先用合適的 input plug-in 來讀檔。我們可以在官方文件找到一卡車的 plug-in ,根據我的需求,選用 file:
https://ithelp.ithome.com.tw/upload/images/20201006/20129624u2E8E9O2Nm.png
配置檔編寫如下:

input {
        file {
                path => "/home/sample-stock.json"
                start_position => "beginning"
        }
}

filter plug-in

Logstash 預設包含了一個 JSON filter 插件,用來解析 JSON 資料格式並且在 logstash 中建立對應的資料結構。如果不用 filter 直接 Output,就只是把一個字串打上 ES Cloud。編輯 Conf 檔如下:

filter {
        json {
                source => "message"
        }
}

其中,我把指定了 source 欄位為 message。在 logstash 中,所有的 event 會被存放在 message 欄位中。

output plug-in

最後就是要指定要把資料送到哪去,很直觀的就選擇 Elasticsearch 插件,使用說明書請參閱官方文件

output {
        elasticsearch {
                index => "history-prices-logstash"
                cloud_id =>"<label>:<cloud-id>" 
                cloud_auth =>"user_name:password"
        }
}

配直 Elasticsearch 插件也是很直觀,指定 Index,設定帳密,搞定。

跑起來

最後一步,就是執行 Logstash 啦~

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/sample.conf

https://ithelp.ithome.com.tw/upload/images/20201006/20129624kGGY83Mk7z.png

成功了耶。但好像多了一些欄位,明天再來研究吧。


上一篇
[Day21] 每日收盤資料更新 using Logstash (1)
下一篇
[Day23] 每日收盤資料更新 using Logstash (2) - http_poller plug-in
系列文
Elastic 戰台股30

尚未有邦友留言

立即登入留言