前言
最近需要开发一个监控项目,主要用于监控服务器的各项硬件指标,以及应用的状态(只需要确认应用是否存活),到了这个阶段也希望自己能静下心来总结一下。
需求
服务器监控
服务器监控目前只需要监控起CPU、DISK和RAM的使用情况,本可以java编程解决,
但是考虑到程序的扩展(后续可能新增指标),所以使用了java+shell的方式,
即shell脚本获取指标、打印,java控制shell脚本的执行,并获取返回值。在经
由java后台解析入库。
应用监控
应用监控在此处就比较简单,只考虑应用的存活情况即可。那么考虑到通过端口的
状态来确认应用的状态(在部分情况下端口状态并不能反映应用本身的状态,但此
处暂不考虑)。
管理员维护
由于涉及到预警告知的概念,那便引入了管理员的概念,与服务器绑定,做通知用。
设计
系统架构
采用 单独jar + 管理平台的方式
1、单独jar: 运行于服务器上,用于根据管理平台下发的端口判断应用状态、定
期执行Shell脚本、解析返回值、推送结果至管理平台。
2、管理平台: 用于服务器、应用等的维护,针对服务器应用集端口的下发,接收
状态报文,解析入纵表库。并提供数据组装、展示的功能。
设计重点
端口下发
1、由于应用监控的徐奥,要对每个服务器下发对于的应用端口集合,集合主要维护
在管理平台;
2、管理平台初始化时全量下发,每个服务器下发对应端口集,该过程需要在数据
源实例化之后、项目启动前。
3、管理平台在对服务器新增、修改应用数据后,只针对该服务器重新下发端口集以
及时更新。
服务器监控指标可配置
1、服务器监控指标需可配置,即可实现对A服务器只监控CPU,而对B服务器可监控
CPU、DISK、RAM和新增其他指标,并且不同服务器指标的阈值也可配置。
2、Shell脚本编辑扩展,送至单独jar的数据集时一致的,而监控平台拿到的数据
集也是一致的,但针对各个服务器监控指标集,需做筛选。
Shell执行及数据解析
1、理论上,新增指标只需更改Shell脚本即可实现。
2、Shell脚本的执行,由单独Jar的定时任务控制。
数据推送及接收
1、数据经单独Jar推送至监控平台,考虑并发,先将接收的数据入队列,另起线程
对队列做处理,保证线程安全。
解析入库
1、仅需注意数据表使用纵表即可(为搭配参数可扩展设计)
历史数据备份
1、根据监控频率的不同和监控参数数量的差异,数据量不可控,所以需要做备份处
理。
2、新数据正常入数据表,定时任务控制每个周期的第一天凌晨(例如:每个月的一
号凌晨00:00:00)执行数据库操作。
3、主要操作为更改数据表名为历史表(带上日期),并新建数据表作为数据存储用,
这样设计省去了数据迁移的消耗。
总结
需求至此基本满足,实现了服务器和应用的监控,此外,结合VUE+ECharts还能实现数据展示和图表展示,使结果更为直观。