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 或者扫描二维码关注公众号: