1、背景知识
一个优秀的软件需要具备的特点:
1: 软件的实用性
软件的诞生就是为了解决特定的问题,比如现在流行的 MVC 框架,早期没有 MVC 开发的时候,耦合度很大,后期维护更新成本搞,难度大,这样 MVC 框架就孕育而生;比如 OA 系统为了解决公司协同的问题 ;比如 微信 QQ 等,即时聊天 为了解决人们远程沟通的问题。
2:软件的稳定性
软件的实用性问题解决后,急需要解决的问题就是软件的稳定性。一般线上系统都会承载企业的某项业务,系统的稳定性直接影响了业务是否能够正常运行。
3:代码的规范性
铁打的营盘流水的兵,一款优秀的软件不仅仅是功能的实现。整体架构、功能某块、代码注释、扩展性等问题也需要考虑,毕竟在一个软件的生命周期中,参与的人实在太多、主创人员也可能随时六十。所以代码的规范性就难能可贵。
4:升级保持向前兼容性
如果一个软件平时使用挺好,但是升级却越来越非晶,或者升级后稳定性大打折扣,也能以成得上一个好的软件。
5:基本的使用手册
文档,一个简单有效的使用手册,才是程序的王道。能让用户一目了然,功能、架构、设计思路、代码等等。
2、需求分析:
随着公司业务发展,支撑公司业务的各种系统越来越多,为了凹征公司的业务正常进行,急需要对这些现上系统的运行进行监控,做到问题的即使发现和处理,最大程度减少对业务的影响。
目前的系统分类有:
1)有基于 Tomcat 的 web 应用
2)有独立的 java Application 应用
3)有运行在 linux 上的脚本程序
4)有大规模的集群框架(zookeeper、Hadoop、Storm、SRP…..)
5)有操作系统的运行日志 (top)
主要功能需求分为: 监控系统日志中的内容,按照一定规则进行过滤 、发现问题之后通过短信和邮件进行告警。
3、功能分析 :
数据输入:
日志数据:使用 flume 客户端获取各个系统的数据;
规则数据:用户通过页面输入系统名称/负责人出发规则等信息;
数据储存:
使用 flume 采集数据并存放在 kafka 集群中
数据计算:
使用 storm 编写程序对日志进行过来,将满足过滤规则的信息,通过邮件短信 告警并保存到数据库中。
数据展示:
管理页面可以查看出发规则的信息。系统负责人,联系方式,触发信息明细等
4、整体架构设计
主要的架构应用 : flume + kafka +storm + mysql + java web 数据流程如下:
1:应用程序使用 log4j 产生日志
2:部署 flume 客户端监控应用产生的日志信息,并发送到 kafka 集群中
3:storm spout 拉取 kafka 数据进行消费,逐条过滤每条日志进行规则判断,对符合规则的日志进行邮件告警。
4:最后将警告的信息保存到 mysql 数据库中,用来进行管理。
Flume 设计
flume 是一个分布式、可靠的、可用的服务,用来收集、聚合、传输日志数据。
它是一个基于流式数据的架构,简单而灵活。具有健壮性。容错机制、故障转移、恢复机制。提供一个简单的可扩展的数据库模型,允许在线分析程序
拦截器
Kakfa 设计
kafka是一个分布式消息队列:生产者、消费者的功能
分片以及副本数 定义:
1)创建一个 topic all_app_log
2) 指定分片数据,指定副本数(假设 实际日志有 3T 规模)需要 10 个分片 3个 副本
3T 的日志数据
平均每秒数据量:3T / 24H = 0.125T=125G / 60 M = 20G / 60S = 20000M / 60S = 333M
峰值的数据量:333M * 3
考虑活动峰值:333M * 3 * 3
结论:每秒需要处理 3G 的数据 ;kafka 理论值数据量是 600m / S ,实际折算 300M/S
3G / 300M = 10 分片
3)如何计算副本数
broker 数量大于 10 ,只需要副本数为 2
broker 数量小于 10 ,需要副本数为 3
4)kafka 保存数据策略 168 小时,存储数据3 * 3T * 7D = 63T
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!