使用 ELK 來分析你的支付寶帳單

ELK 即 elasticsearch, logstash 以及 kibana。Elasticsearch 是一個基於 lucene 的分佈式搜索引擎,logstash 是一種日誌傳輸工具,也能夠對日誌數據進行過濾處理,kibana 則是基於 angular 開發的展現平臺,能夠進行數據的搜索以及可視化展現。目前 ELK 平臺被普遍用於日誌的分析處理。html

支付寶帳單

前幾天看了一篇國外使用 ELK 分析帳單的博客,忽然冒出這個想法是否是可使用 ELK 去分析支付寶帳單。支付寶官網提供下載帳單的地方,能夠下載任意時間段的帳單,能夠下載 csv 以及 txt 格式的數據文件。登陸支付寶官網首頁產看點擊查看全部交易記錄就能夠了。git

9ePwm8.md.png

9einhj.md.png

能夠切換到高級版查詢數據,有更多的查詢條件來查詢數據,包括交易時間,交易狀態,關鍵字等等,你能夠下載任意時間段的數據。其實兩種格式的數據都是 csv 格式的數據。表格數據主要包含如下信息:github

交易號 商戶訂單號 交易建立時間 付款時間 最近修改時間 交易來源地 類型 交易對方 商品名稱 金額(元)收/支 交易狀態 服務費(元)成功退款(元)備註 資金狀態瀏覽器

安裝

ELK 三個軟件的安裝都十分簡單,下載就可使用,無需安裝。能夠去 https://www.elastic.co/cn/downloads 下載頁面選擇合適的工具進行下載。三個工具的使用都十分簡單,通常只須要運行 bin 文件下的 bat 文件就能夠了。我下載的都是最新版本的,即 6.1.2 版本。bash

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"
}
複製代碼

運行

整個框架數據流轉的過程大體是這個樣子的:curl

elk

首先從支付包官網下載數據,能夠選擇 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的時候,咱們須要建立索引:

9MicpF.md.png

9Migl4.md.png

索引建立成功以後,你就能夠進行查詢了。對於 kibana 的查詢我就不一一贅述,能夠參考query dsl。這裏,我主要講一下數據的可視化。最後建立的一個 dashboard 大體是這個樣子的:

9MiotK.md.png

主要包括:當前的累計收入,累計支出,支出收入比,每禮拜最高支出,支出變化,Visualize 的類型主要包括 Metric, Line, Pie, Vertical bar 類型。選一個例子來說,假設咱們要建立一個每一個禮拜最高支出的柱狀圖。

gickr com _583f7777-c0a9-2934-1569-578643ec11d1

總結

以上我就是利用 ELK 對於支付寶帳單的一個可視化分析。ELK 對於大數據的分析能夠說是如魚得水,這次的實驗也僅僅是一個簡單的嘗試,若是你們有更有意思的想法,能夠和我交流。

以上。

歡迎搜索微信號 mad_coder 或者掃描二維碼關注公衆號:

93cfyj.jpg
相關文章
相關標籤/搜索