虽然本文主要阐释Kibana 在项目中的应用 ,但是我们需要了解一个常识,那就是一般情况下ELK都是组合应用的,在我们的项目中我们也是一起使用的,但是由于对Kibana 的颇具热情,所以本文是对Kibana的初始 。
先说下项目背景,我是Datawarehouse 的 ,免不了会对些个Datastage job 和 Informatica 的 session 以及我们写的shell 和 python ,以及store procedure 等进行监控和追踪 。
一般情况下如果是做电信的DW项目 都可以有免费的手机短信做为失败告警,当然也会有最基本的邮件通知 。短信能够达到及时性 ,邮件缺失灵活性,不能走到哪里都扛着电脑吧 ,当然现在也会有移动端的邮件。
随着DevOps 和 Agile 等 企业转型的深入 ,项目迫切需要做一些个创新。正如亚马逊创始人Jeff 说的 需要跟上时代 从外部获取好的改变。正好我们项目中存在一些个小的项目能够跟这部分契合起来。
小项目的背景是,我们数据从各地市电信营业厅加载到我们ODS(Operational Data Store,数据仓库项目中可选的部分)时候他们是以文件的形式通过sftp 发到我们的服务器端的 。 在这里面我们会用python和shell以及sp 等手段和方法把数据加载到我们的ODS 端数据库中。假设我们叫这部分数据为财务数据(finance data)。这部分财务信息以一定的频率发送过来,假设是
15分钟。同时这部分数据发送过来需要有两部分内容,一种就是我们说的财务数据 假设叫data 文件,另外一部分就是 对财务数据的核对文件,假设叫check 文件 。data 文件里面顾名思义存的就是一条条的业务数据,而check 文件里面内容还是比较简单的 是对 data 文件的做的一个count ,只记录data 文件的条数 。因为数据都是按频率发送过来的 ,所以这两个文件需要有系统的名字 加 时间戳 。区分的依据是文件的后缀 。假设 文件名字如下 :
Hong_Kong_202002091234.dat
Hong_Kong_202002091234.chk
为了处理这些个分批次发送过来的数据,我们需要在Unix crontab 里面配置定时任务。
我们这个定时任务只是一次我们脚本的启动,整个业务流程我们采用python 程序完成。而且这个程序进程会一直存在 ,当然如果存在失败因素等我们需要重新再crontab里面在启动一次 。python 进程会处理发送过来的数据 。处理过程我们就不在介绍了 。
新项目就是为了检测这个进程的 以及我们收到文件是否会发生积聚 ,假设进程失败,或是作为的hang 哪里了 那么文件数就会增加 。
最简单的是我写了个 ps -ef | grep 脚本 ,去动态的隔断时间去check 下这个进程 ,并发送邮件到同事。但是有个缺点就是大家邮件太多 ,有时候 根本不留意,所以大boss 就提议弄个可视化的 。
从ELK 项目被提上议程 。
Kibana 项目大概架构
logstash 调用shell 完成数据收集并发送到 ES ,Kibana 从ES 取数据完成展示。
从website 找到的资料