监控系统可以说是应用系统的安全卫士,能够监控业务以及服务器本身的运行状态。通过监控数据可以让业务服务中的问题暴露的时间点前置,从而降低业务损失。
接下来笔者将给大家介绍一下我们业务线自己开发的一个小型监控系统-X监控系统。
X
监控
X 监控系统主要包括配置模块、报表模块以及监控模块,横跨了job系统、API系统以及监控系统,用到了redis、Qbus等中间件。
由于监控数据采集量大,看板要求显示历史时期较长,监控数据采用行业先进的处理方式,ElasticSearch,配置相关信息存储采用MySQL。
系统架构图如下
X监控系统包含了两个方面的监控,服务端监控(业务监控)和代理端监控(服务器监控)。
服务端监控
特点是不需要在目标机器上部署任何东东,直接通过http请求以及数据库的连接来获取业务以及服务的状态。
主要包括API监控和DB监控:
API监控:配置好目标系统的接口路径以及参数,记录接口的返回数据形成监控报表;可根据系统中配置的报警阈值进行报警。
DB监控:选择数据库和表格,通过select 语句判定表中的数据量,从而形成业务数据的监控报表,可根据系统中配置的阈值进行报警。
代理端监控
不同于服务端监控,代理端监控需要在目标机器上部署一个php的工具包,只依赖PHP环境,尽量简化agent端对环境的依赖,这样的设计可以使不同语言的agent转化降低成本。
agent端有两大主要流程:
1.定期重启监控服务,用于同步配置变更,防止监控进程死掉
2.监控服务流程,主要是用于监控数据采集,上报给监控接口
服务端监控包括文件监控、进程心跳、CPU、内存、硬盘以及负载。
服务端监控包括文件监控、进程心跳、CPU、内存、硬盘以及负载。
文件监控
监控服务器上某个文件是否存在,入参是文件的路径,具体命令如下:
查询指定目录下名称为filename的文件的个数;
可根据文件是否存在设定报警的阈值。
进程心跳
查看进程是否存活,入参是进程的名称,具体命令如下:
查看特定进程processName的个数,并且排除了grep命令的记录,如果要求脚本必须启动,不启动则报警。
CPU
查看并记录CPU使用情况的相关数据,形成报表,具体命令如下:
内存
从应用程序的角度查看内存的使用情况并保存数据形成报表,具体命令如下:
可用内存=系统
free memory+buffers+cached
硬盘
获取并保存目标机器硬盘的相关使用信息,形成数据报表,具体命令如下:
负载
获取并记录系统在平均1,5,10分钟内的系统的平均负载,形成报表。
具体命令如下:
系统平均负载是指在特定时间间隔内运行队列中的平均进程数。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。
如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
因此,可以此为依据设置报警的阈值。
总结
X监控系统覆盖了业务监控和服务器监控,实现略简单,但具备了监控系统的监控、报表以及报警的主要功能,基本满足了业务需求。
大家在业务开发和测试过程中,也可以收集并实现业务所需要的监控,从而持续保障产品线上稳定性。
Qtest是360旗下的专业测试团队!
是WEB平台部测试技术平台化、效率化的先锋力量!
领取专属 10元无门槛券
私享最新 技术干货