实时日志监控系统
目标:
实现对系统日志的实时监控,快速获取系统运行时异常日志,并以邮件的方式通知运维人员
关键技术:
flume、rocketmq、jstorm、hbase
整体架构图:
WebServerWebServerWebServerSourceSinkChannel flume-agentEmailServerEmailBoltIsErrorBoltHbaseBoltJstormSpoutLogTopicTag1Tag2Tag3 RocketMQTag1ErrorTableTag2ErrorTableTag3ErrorTableHbase
系统描述
系统采用三层:数据采集(flume+rocketmq)、数据计算层(jstorm)、数据存储层 flume对应用系统实时产生的日志逐条进行收集,发送到rocketmq消息队列
jstorm从rocketmq拉取日志,逐条对拉取到的日志进行分析,如果日志符合预警条件则给相关人员发送邮件,并且将日志信息写入hbase,方便查看。
hbase存储所有的满足预警条件的日志信息,为运维人员提供查询基础。 源码下载地址:http://pan.http://www.wodefanwen.com//s/1bnxt0dx
架构设计考虑
可用性
1:agent挂掉 1):机器挂掉导致agent挂点,这个没影响,机器挂了不会产生日志 2):agent进程挂点,按下面两种方式来提高系统的可用性。首先,所有的Agent 在supervise的方式下启动,如果进程死掉会被系统立即重启,以提供服务。其次, 对所有的Agent进行存活监控,发现Agent死掉立即报警
2:rocketmq、jstorm、hbase都是分布式的,具有高可靠性,可以不用考虑
可靠性
Flume 的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在
送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。Flume 使用事务性的方式保证传送Event整个过程的可靠性。Sink 必须在 Event 被存入 Channel 后,或者,已经被传达到下一站agent里,又或者,已经被存入外部数据目的地之后,才能把 Event 从 Channel 中 remove 掉。这样数据流里的 event 无论是在一个 agent 里还是多个 agent 之间流转,都能保证可靠,因为以上的事务保证了 event 会被成功存储起来。而 Channel 的多种实现在可恢复性上有不同的保证。也保证了 event 不同程度的可靠性。比如 Flume 支持在本地保存一份文件 channel 作为备份,而memory channel 将 event 存在内存 queue 里,速度快,但丢失的话无法恢复。
扩展性
1:agent,对于Agent这一层来说,每个机器部署一个Agent,可以水平扩展,不受限
制。一个方面,Agent收集日志的能力受限于机器的性能,正常情况下一个Agent可以为单机提供足够服务
2:rocketmq、jstorm、hbase具有高扩展性,可以不用考虑