虽然第一天的比赛里,我们用ELK成功对日志文件进行解析,并用可视化界面展示数据。但我们不想只限于“搭环境比赛”,而且从第一天的情况来看, ES的性能在有效的资源下已经有点撑不住了。所以决定今天开始自己造轮子。
再次分析题目,其实比赛要的是某时间段某源IP、目标IP、请求URL的统计数据,对具体的数据明细并不关心。故我们打算自己写个Agent脚本,读取日志文件,通过socket传输给Server端。Server端对日志文件按行截取,然后利用之前在logStash中写的grok正则表达式来解析需要的信息,然后汇总到redis中。前端页面只负责从redis中获取统计数据。
大概的架构图如下:
1. logAgent部分
主要是获取到指定目录下所有的日志文件,多线程对多个文件进行随机读取,建立Socket通道,输出到logServer里。
(1)首先用common-io包里的FileAlterationObserver来实现对指定目录下文件的监控
FileAlterationObserver observer = new FileAlterationObserver(path, new FileFilter() {
public boolean a