公司领导想要看到系统按省份、成功率、业务来分类的时时访问监控图像,虽然说是个没啥用的项目,既然老板发话了,还是去做吧,前端显示页面不是自己开发,前端只需要来数据库抽取我时时计算出的结果展示出来就行了,心里一万只草泥马,那就意味着后端所有斗得自己做了。
想了下咋实现呢,监控访问量嘛,最简单通用的方法无非就是读取端口日志,查了下日志,刚好包含了有我所需的字段,所以问题就从0头绪变成了-----日志分析实现监控
有了日志文件,怎么能做到计算后写道数据库呢,还要求几乎是时时(5秒一次更新)的需求,这时候就要用到消息队列了
原理是:
把日志抽取成一条条信息发送到处理代码中计算出结果,最后再写入数据库。
看似一句话,其实需要实现的有:
1、日志抽取
2、消息传递
3、计算逻辑
4、数据库
按以上大方向往下走,慢慢逐个分析
日志抽取:ELK什么的就不谈了,因为我有自己计算代码,所以没用ELK的抽取,用的是filebeat这个超级轻量级日志抽取工具。
filebeat仅是抽取功能,抽到了数据,接下来要传递了,这种批量数据处理更新肯定不能是时时传递处理,所以要用到消息队列
消息队列各种都行,我用的是kafka,优势是有数据持久化和对python友好的对接模块
所以说我的代码是用python来写的,当然为了避免数据库端口压力(避免给自己找坑),数据是在python中批量缓存计算出结果后再写入数据库,这里就要用到pandas模块、json模块等
最后通过pyMySQL写入到MySQL中
内容多又杂,花了一个周实现了后端从0开始搭建(filebeat、kafka、数据库都是新搭建配置)。先在这里纪录下大概,之后会对filebeat搭建与配置、kafka搭建与配置、python-kafka模块使用、pandas模块、json模块、pymysql模块、计算逻辑都会单独纪录
2019.3.21更新:
今天突然闲了一下,顺手继续纪录这篇文章。
先从filebeat开始谈起。常用的日志管理套件ELK应该是很出名的了,其中L代表logstash,logstash是ELK的日志抽取工具,所以,日志抽取其实可以采用logstash。我没有采用logstash的原音是,数据不是走到ELK,所以相对logstash来说,基于相同底层开发的filebeat这个工具更加轻量化,系统资源吃的更少。当然如果是做ELK的,无缝对接用logstash也是不错的选择。
filebeat安装很简单,直接yum就可以了,当然也有下载包解压后使用的。yum安装后在/etc/filebeat目录下有相关的配置文件。
[root@localhost ~]# cd /etc/filebeat/
[root@localh