ELK 即 elasticsearch, logstash 以及 kibana。Elasticsearch 是一個基於 lucene 的分佈式搜索引擎,logstash 是一種日誌傳輸工具,也能夠對日誌數據進行過濾處理,kibana 則是基於 angular 開發的展現平臺,能夠進行數據的搜索以及可視化展現。目前 ELK 平臺被普遍用於日誌的分析處理。html
前幾天看了一篇國外使用 ELK 分析帳單的博客,忽然冒出這個想法是否是可使用 ELK 去分析支付寶帳單。支付寶官網提供下載帳單的地方,能夠下載任意時間段的帳單,能夠下載 csv 以及 txt 格式的數據文件。登陸支付寶官網首頁產看點擊查看全部交易記錄就能夠了。git
能夠切換到高級版查詢數據,有更多的查詢條件來查詢數據,包括交易時間,交易狀態,關鍵字等等,你能夠下載任意時間段的數據。其實兩種格式的數據都是 csv 格式的數據。表格數據主要包含如下信息:github
交易號 商戶訂單號 交易建立時間 付款時間 最近修改時間 交易來源地 類型 交易對方 商品名稱 金額(元)收/支 交易狀態 服務費(元)成功退款(元)備註 資金狀態瀏覽器
ELK 三個軟件的安裝都十分簡單,下載就可使用,無需安裝。能夠去 https://www.elastic.co/cn/downloads 下載頁面選擇合適的工具進行下載。三個工具的使用都十分簡單,通常只須要運行 bin
文件下的 bat 文件就能夠了。我下載的都是最新版本的,即 6.1.2 版本。bash
運行命令:elasticsearch.bat
微信
驗證 ES 運行成功,可使用 curl
命令,curl http://loclahost:9200
或者直接使用瀏覽器訪問 localhost:9200
框架
{
"name" : "ZWtApuh",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "DyfiD0NlSkuDdE5m-NBRAg",
"version" : {
"number" : "6.1.2",
"build_hash" : "5b1fea5",
"build_date" : "2018-01-10T02:35:59.208Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
複製代碼
整個框架數據流轉的過程大體是這個樣子的:curl
首先從支付包官網下載數據,能夠選擇 excel 格式進行下載,爲了方便數據的處理,最好刪除掉表頭和表尾的數據,只保留數據,這也是爲了方便後面的 logstash 的處理。接着使用 logstash 的處理,logstash 至關因而一個數據中轉站,從 csv 文件中獲取數據,而後對獲取的數據在進行處理,在將數據輸出到 elasticsearch 中。Elasticsearch 對於數據進行索引,最後 kibana 做爲展現工具能夠對 ES 索引的數據進行展現。jvm
從支付寶官網下載數據後,應該刪除掉表頭和表尾數據,只保留咱們須要的數據信息。接着使用 logstash 來處理數據,包括 input, filter, output 三個方面的配置。首先是 input:elasticsearch
input {
file {
type => "zhifubao"
path => ["C:/Users/neal1/project/bill-analysis/data/*.csv"]
start_position => "beginning"
codec => plain {
charset => "GBK"
}
}
}
複製代碼
能夠經過 type 來設置來區分數據的不一樣類型,注意一點的是須要設置 charset 來處理編碼問題,不然可能會致使亂碼問題。另外對於 ES 的配置,也要設置 ES 安裝程序 config 文件夾中的 jvm.options 文件,將 -Dfile.encoding=UTF8
改成 -Dfile.encoding=GBK
,不然 logstash 向 ES 中寫入數據也會產生報錯。
filter {
if [type] == "zhifubao" {
csv {
separator => ","
columns => ["TransId", "OrderId", "TransCreateTime", "Paytime", "LastModified", "TransSource", "Type", "Counterparty", "ProductName", "Amount", "inOut",
"status", "serviceCost", "IssuccessRefund", "Remark", "FundStatus"]
convert => {
"Amount" => "float"
}
}
date {
match => ["TransCreateTime", "dd/MMM/yyyy HH:mm:ss", "yyyy/MM/dd HH:mm"]
}
}
}
複製代碼
接着是使用 filter 插件對數據進行過濾
filter {
if [type] == "zhifubao" {
csv {
separator => ","
columns => ["TransId", "OrderId", "TransCreateTime", "Paytime", "LastModified", "TransSource", "Type", "Counterparty", "ProductName", "Amount", "inOut",
"status", "serviceCost", "IssuccessRefund", "Remark", "FundStatus"]
convert => {
"Amount" => "float"
}
}
date {
match => ["TransCreateTime", "dd/MMM/yyyy HH:mm:ss", "yyyy/MM/dd HH:mm"]
}
}
}
複製代碼
須要對於 csv 文件進行轉化,設置對應的列名。還有一點就是要使用 date 插件來修改 timestamp,不然索引的默認 timestamp 是 logstash 向 ES 中寫入數據的時間。經過 date 插件能夠將交易事件轉化爲默認的 timestamp 來使用。另外咱們還須要轉化 Amount 的類型,這也是爲了後來數據的可視化的聚合,Amount 只有變成數值型才能夠進行數字運算。
最後輸出到 ES 中
output {
if [type] == "zhifubao" {
elasticsearch {
hosts => [ "localhost:9200" ]
index => logstash
}
}
}
複製代碼
hosts 能夠支持添加多個 ES 實例,而且設置索引名,這裏最好設置一下,不然可能會致使索引名映射錯誤。這樣,就完成了 logstash 的配置文件 logstash.conf。Logstash 的運行命令爲 logstash.bat -f logstash.conf
來運行。
最後一步就是利用 kibana 進行數據的展現和分析了。再次我也僅僅是站在一些角度提出本身對於數據的分析,可能還有不少更有意思的想法我並無想到。Kibana 是一款基於 angular 的 ES 展現工具,它講不少 ES 語法進行封裝,所以進行一些操做就能夠進行數據的查詢或者可視化。首次使用 kibana的時候,咱們須要建立索引:
索引建立成功以後,你就能夠進行查詢了。對於 kibana 的查詢我就不一一贅述,能夠參考query dsl。這裏,我主要講一下數據的可視化。最後建立的一個 dashboard 大體是這個樣子的:
主要包括:當前的累計收入,累計支出,支出收入比,每禮拜最高支出,支出變化,Visualize 的類型主要包括 Metric, Line, Pie, Vertical bar 類型。選一個例子來說,假設咱們要建立一個每一個禮拜最高支出的柱狀圖。
以上我就是利用 ELK 對於支付寶帳單的一個可視化分析。ELK 對於大數據的分析能夠說是如魚得水,這次的實驗也僅僅是一個簡單的嘗試,若是你們有更有意思的想法,能夠和我交流。
以上。
歡迎搜索微信號 mad_coder 或者掃描二維碼關注公衆號: