项目我已上传到github中,感兴趣的可以下载下来看看,希望大神可以在以后多多指点。
github代码地址:https://github.com/sjctt/spartacus
在前面几篇文章里完成了数据采集模块的设计研发,主要功能就是通过syslog接收信息后缓存到redis中等待处理。
涉及到一些技术点如:UDP网络通信,非阻断式接收、多线程处理、队列任务的使用、java操作redis数据库等。
今天开始来做数据工厂部分,即从redis中拿出缓存数据后将数据经过解析后放入elasticsearch中存储。开始之前仍然先来做一下需求分析。
1. 需求分析
1.1 数据解析及索引
1. 对redis中缓存数据逐条进行基础解析,并生成es索引。
2. 基础解析可根据不同对象的日志进行不同形式的解析,如:windows日志、linux日志、web服务器日志等等解析内容尽量 丰富。
1.2 服务中心消息通信
1)提供与服务中心交互接口,便于服务中心对该模块进行状态数据采集,这是考虑以后如果采用集群部署形式时,可以通过
服务中心模块进行系统状态追踪。
2)接口采用应答模式,由服务中心发送状态获取请求,采集模块回应相应数据。
4)服务中心交互内容包括一下内容:
获取节点系统信息:计算机名、IP地址
检查节点数据采集模块运行状态
2. 概要设计
数据工厂模块的需求就比较简单了,其实目的只有一个,就是把redis的缓存转化未es的索引,其中解析部分应该是比较复杂的一块。消息通信接口与采集模块功能相同,这里不做赘述。
2.1 ES入库流程图
3. 详细设计
3.1 数据基础解析
1. 通过正则判断数据来源类型,目前主要包括一下类型:
1)类windows日志:
日志样例:<30>Jul 26 10:48:39 XINCHENI-1B4AC5 Service Control Manager: 7036: Windows Installer 服务处于 停止 状 态。
正则表达式:[<][\d{1,9}]+[>](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [\W\w]*[:] \d{1,9}[:] [\W\w]*
2)类linux日志:
日志样例:<11>Jul 26 11:48:15 localhost pulseaudio[2615]: alsa-sink.c: ALSA 提醒我们在该设备中写入新数据,但实际上没有什么可以写入的!
正则表达式:[<][\d{1,9}]+[>](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [\W\w]*[[]\d{1,9}[\]][:][\W\w]*
3)类IIS日志:
日志样例:<134>2018-04-13 23:59:59 10.0.0.2 GET /autWeb/ClientBin/aut.xap - 80 - 10.0.0.188 Mozilla/5.0+(Windows+NT+10.0;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko 200 0 0 3806
正则表达式:[<][\d{1,9}]+[>]([0-9]{4})[-]([0-9]{2})[-]([0-9]{2}) ([0-9]{2})[:]([0-9]{2})[:]([0-9]{2}) [\W\w]+ ((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))+ [\W\w]+
4)类tomcat日志
日志样例:<134>192.168.7.111 - - [25/May/2018:17:33:28 +0800] "GET /favicon.ico HTTP/1.1" 200 9662
正则表达式:[<][\d{1,9}]+[>]((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))) [\W\w]+ [[][\W\w]+[\]] [\W\w]+
3.2 接口命令列表
1)get_sysinfo:获取系统基本信息
返回数据格式:{"runstatus":"1","nodename":"node1"}
runstatus:节点运行状态,接口正常调用则返回1
nodename:节点计算机名称
状态检测及系统信息获取暂时使用一个命令
项目我已上传到github中,感兴趣的可以下载下来看看,希望大神可以在以后多多指点。
github代码地址:https://github.com/sjctt/spartacus