ELK 即 elasticsearch, logstash 以及 kibana。Elasticsearch 是一個基於 lucene 的分散式搜尋引擎,logstash 是一種日誌傳輸工具,也可以對日誌資料進行過濾處理,kibana 則是基於 angular 開發的展示平臺,可以進行資料的搜尋以及視覺化展示。目前 ELK 平臺被廣泛用於日誌的分析處理。
支付寶賬單
前幾天看了一篇國外使用 ELK 分析賬單的部落格,突然冒出這個想法是不是可以使用 ELK 去分析支付寶賬單。支付寶官網提供下載賬單的地方,可以下載任意時間段的賬單,可以下載 csv 以及 txt 格式的資料檔案。登入支付寶官網首頁產看點選檢視所有交易記錄就可以了。
可以切換到高階版查詢資料,有更多的查詢條件來查詢資料,包括交易時間,交易狀態,關鍵字等等,你可以下載任意時間段的資料。其實兩種格式的資料都是 csv 格式的資料。表格資料主要包含以下資訊:
交易號 商戶訂單號 交易建立時間 付款時間 最近修改時間 交易來源地 型別 交易對方 商品名稱 金額(元)收/支 交易狀態 服務費(元)成功退款(元)備註 資金狀態
安裝
ELK 三個軟體的安裝都十分簡單,下載就可以使用,無需安裝。可以去 https://www.elastic.co/cn/downloads 下載頁面選擇合適的工具進行下載。三個工具的使用都十分簡單,一般只需要執行 bin
檔案下的 bat 檔案就可以了。我下載的都是最新版本的,即 6.1.2 版本。
elasticsearch
執行命令: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"
}
複製程式碼
執行
整個框架資料流轉的過程大致是這個樣子的:
首先從支付包官網下載資料,可以選擇 excel 格式進行下載,為了方便資料的處理,最好刪除掉表頭和表尾的資料,只保留資料,這也是為了方便後面的 logstash 的處理。接著使用 logstash 的處理,logstash 相當於是一個資料中轉站,從 csv 檔案中獲取資料,然後對獲取的資料在進行處理,在將資料輸出到 elasticsearch 中。Elasticsearch 對於資料進行索引,最後 kibana 作為展示工具可以對 ES 索引的資料進行展示。
從支付寶官網下載資料後,應該刪除掉表頭和表尾資料,只保留我們需要的資料資訊。接著使用 logstash 來處理資料,包括 input, filter, output 三個方面的配置。首先是 input:
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 或者掃描二維碼關注公眾號: