Skip to content

Linux系统监控

leeyoshinari edited this page Nov 30, 2019 · 1 revision

一、实现功能

1、支持监控整个服务器的CPU使用率、剩余内存、指定磁盘的IO;
2、支持监控指定端口的CPU使用率和内存,可同时监控多个端口;
3、支持服务器剩余内存过低时,发送邮件提醒;支持自动清理缓存;
4、支持监控JVM内存和垃圾回收(仅java应用);
5、支持随时启动和停止监控指定的端口;
6、支持随时将监控结果可视化;
7、支持自动统计CPU和IO的百分位数(75%、90%、95%、99%);
8、可随时查看端口监控状态;

二、整体思路

1、采用flask框架,设计前后端;
2、采用线程池+队列的方式同时监控多个端口;
3、将监控结果写到日志中,并从日志中读取监控结果;
4、使用Linux命令获取监控结果,确保结果准确性;

三、配置文件

修改config.py中的配置项

IP = '127.0.0.1'        #服务器IP
PORT = '5555'        #开启Flask服务的端口
THREAD_NUM = 5        #线程池大小,即可同时监控的端口数
LEVEL = 'INFO'            #日志级别
BACKUP_COUNT = 30        #保存日志的数量;日志按天分隔,即监控结果保存多长时间
LOG_PATH = 'logs'        #日志保存路径
INTERVAL = 1            #监控时,执行命令的时间间隔;如果同时监控的端口数大于8,可设置0.8或更小
SLEEPTIME = 3            #当端口停止后,轮询端口状态的时间间隔;当端口重启后,可自动重新监控
ERROR_TIMES = 5        #当监控指定进程时,执行监控命令失败的次数;达到设置的次数,自动停止监控
IS_JVM_ALERT = False        #当java应用Full GC频率过高(>1h/次)时,是否发送邮件提醒
IS_MEM_ALERT = False        #当剩余内存低于设定值时,是否发送邮件提醒
MIN_MEM = 2            #最低剩余内存设置,单位:G
ECHO = 0        #当剩余内存低于设定值时,是否清理缓存;0: 不清理,1: 清理页面缓存,2:清理dentries和inodes缓存,3: 同时清理1和2
DISK = 'device1'        #磁盘号,监控指定磁盘的IO;通过df -h 文件名查询服务所在磁盘号
FGC_TIMES = 'FullGC.txt'        #记录每次Full GC的时间
# 如果设置了邮件提醒,以下配置必须,如果不需要邮件提醒,可不配
SMTP_SERVER = 'smtp.sina.com'        #发送邮箱的SMTP服务
SENDER_NAME = '张三'            #发件人名字
SENDER_EMAIL = 'zhangsan@qq.com'        #发件人邮箱
PASSWORD = 'UjBWYVJFZE9RbFpIV1QwOVBUMDlQUT09'        #发件人邮箱登陆密码
RECEIVER_NAME = 'baidu_all'            #收件人名字
RECEIVER_EMAIL = ['zhangsan@qq.com', 'zhangsi@qq.com']        #收件人邮箱地址

四、运行

启动服务

nohup python3 server.py &

进入监控页面

(1) 监控页面 http://ip:port/startMonitor

(2) 可视化页面 http://ip:port/Visualize

五、使用

(1) 在监控页面
        输入端口号,点击Start Monitor按钮即可开始监控,点击Stop Monitor按钮即可停止监控;
        点击Get Monitor List即可查看已经监控的所有端口;

(2) 在可视化页面
        在Type下拉框中,可选查看端口、进程或整个系统的监控结果;
        如果查看端口或进程的监控结果,Num需要输入端口号或进程号,如果查看系统监控结果,则Num不需要输入;
        StartTimeEndTime为查看具体时间段的监控结果;默认是最近1个小时;
        showIO为是否统计IO的百分位数,仅在查看端口或进程监控结果时有效;默认为1,统计IO的百分位数;

六、注意事项

(1) 使用top命令监控CPU和内存,使用jstat命令监控JVM内存(仅java应用),使用iostat命令监控磁盘IO,使用netstat命令根据端口查进程,使用ps命令查看服务启动时长。因此,服务器必须支持以上命令,如不支持,请安装。

(2) 由于程序只开启一个进程,查看监控结果是一个计算密集型任务,故每次查看监控结果,监控的频率会明显变低。后续优化会单独开启一个进程用于查看监控结果;