使用 ELK 来分析你的支付宝账单
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 关注微信公众号,点击阅读原文可以获取链接版原文。
使用 ELK 来分析你的支付宝账单的更多相关文章
- elk收集分析nginx access日志
elk收集分析nginx access日志 首先elk的搭建按照这篇文章使用elk+redis搭建nginx日志分析平台说的,使用redis的push和pop做队列,然后有个logstash_inde ...
- elk实战分析nginx日志文档
elk实战分析nginx日志文档 架构: kibana <--- es-cluster <--- logstash <--- filebeat 环境准备:192.168.3.1 no ...
- ELK 日志分析体系
ELK 日志分析体系 ELK 是指 Elasticsearch.Logstash.Kibana三个开源软件的组合. logstash 负责日志的收集,处 ...
- ELK 日志分析实例
ELK 日志分析实例一.ELK-web日志分析二.ELK-MySQL 慢查询日志分析三.ELK-SSH登陆日志分析四.ELK-vsftpd 日志分析 一.ELK-web日志分析 通过logstash ...
- 浅谈ELK日志分析平台
作者:珂珂链接:https://zhuanlan.zhihu.com/p/22104361来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 小编的话 “技术干货”系列文章 ...
- ELK日志分析系统简单部署
1.传统日志分析系统: 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安 ...
- elk日志分析与发掘深入分析
elk日志分析与挖掘深入分析 1 为什么要做日志采集? 2 挖财自己的日志采集和分析体系应该怎么建? 2.1 日志的采集 2.2 日志的汇总与过滤 2.3 日志的存储 2.4 日志的分析与查询 3 需 ...
- Rsyslog+ELK日志分析系统
转自:https://www.cnblogs.com/itworks/p/7272740.html Rsyslog+ELK日志分析系统搭建总结1.0(测试环境) 因为工作需求,最近在搭建日志分析系统, ...
- 十分钟搭建和使用ELK日志分析系统
前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...
随机推荐
- pyinstaller打包的exe太大?你需要嵌入式python玄学 惊喜篇
上篇讲到 pyinstaller打包exe太大的问题 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇zhuanlan.zhihu.com 那既然py ...
- 接口自动化request库入门
requests库7个主要方法 r= requsts.get(),主要属性: r.raise_for_status()方法内部判断r.status_code是否等于200不需要增加额外的if语句,该语 ...
- wait, notify 使用清晰讲解
一个庙里, 三个和尚,只有一个碗, 三个和尚都要吃饭,所以每次吃饭的时候, 三个和尚抢着碗吃. package interview.java.difference.l05; public class ...
- JavaScript-Load-Image
如何将图片显示为canvas https://github.com/blueimp/JavaScript-Load-Image/blob/master/js/load-image-scale.js h ...
- 微信小程序 API 数据缓存
微信小程序 数据缓存 (类似于 cookie) wx.setStorage() 将数据存储在本地缓存中制定的 key 中.会覆盖掉原来该 key 对应的内容,数据存储生命周期跟小程序本身一致,即除用户 ...
- input绑定事件
<input type="text" oninput="functionName()">
- VSCode - 使用 WSL(Windows Subsystem for Linux)
一开始我是只将 VSCode 集成的终端改成 WSL 的 Bash,结果发现内置的 GIt 用的还是 Windows 的 Git,Git Hooks 用的 Windows 的环境,上网搜了一下发现有很 ...
- EDM概念之A/B分类测试法
相信很多情况下大家都会看到A/B分类测试法这个专业术语,下面博主简要介绍下什么是A/B分类测试法. 这里的A和B主要是指两种不同版本的电子邮件.一般来说,可以将用户分为同等数量的两组,一组发送A版本, ...
- lua源码学习篇一:环境部署
研究生即将毕业,答辩完成后,这几天有些时间.开始写一些自己的东西,记录自己的学习历程. --前言 本着学习和交流的原则,本文的内容仅供参考,而不是权威版本,如有任何问题,欢迎指出. --声明 跨专业考 ...
- 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_18maven的java工程取mysql数据库
使用maven创建ava功能,然后读取数据库做一个测试. 我们做的持久层,没有和页面有交互,只做一个java工程就可以了 创建的是java工程,用不用骨架都可以.这里不使用骨架,直接next 直接fi ...