今天跟大家聊聊我这几天捣鼓的“守护2”,别想歪了,不是电影也不是游戏,是我自己搞的一个小玩意儿,用来守护我的小服务器的,算是个升级版。
事情是这样的,之前我不是有个“守护”的脚本嘛主要就是监控服务器的CPU、内存啥的,要是超标了就自动重启服务。用了挺久,也算稳定,但最近发现有点力不从心了。
老版本只能监控CPU和内存,现在服务多了,硬盘空间也得盯着,万一磁盘满了服务直接崩了。
老版本的重启方式太粗暴,直接kill -9,有时候数据还没保存就没了,挺伤的。
我就琢磨着升级一下,搞个“守护2”。
先说监控指标,这回我加了磁盘空间监控,用df -h命令获取磁盘使用率,超过阈值就报警。
然后是重启方式,放弃了kill -9,改用优雅重启。先发送一个TERM信号,让服务自己处理清理工作,等一段时间如果还没停掉,再kill -9。这样能尽量保证数据安全。
具体的步骤是这样:
1. 先写个脚本,读取配置文件,配置里包括要监控的服务名称、进程名、CPU阈值、内存阈值、磁盘阈值等等。配置文件用json格式,方便修改。
2. 然后写监控函数,分别监控CPU、内存和磁盘。CPU和内存还是用top命令,磁盘用df -h。把结果和配置文件里的阈值比较,超过阈值就触发报警。
3. 报警函数,先发邮件通知我,然后执行重启操作。邮件用python的smtplib模块,挺简单的。
4. 重启函数,先发送TERM信号,然后sleep一段时间,如果进程还在,就kill -9。
5. 用crontab设置定时任务,每分钟执行一次脚本。
整个过程挺简单的,就是把之前的东西改了改,加了点新东西。
遇到的坑也有几个:
一开始用df -h获取磁盘空间,结果发现单位是G,阈值我设的是百分比,还得转换一下,挺麻烦的。后来改成用df -i获取inode使用率,这样就不用转换了。
优雅重启的时候,sleep的时间长短是个问题。太短了服务还没来得及处理就kill -9了,太长了又浪费时间。我试了好几次,设成10秒,感觉差不多。
邮件报警的时候,一开始总是收不到邮件,后来发现是邮箱的SMTP服务没开启,开了就好了。
现在“守护2”已经跑了一段时间了,感觉比老版本好用多了。监控指标更全面,重启方式更优雅,希望能更好地守护我的小服务器。
- 改进点:
- 后续可以考虑加个web界面,方便查看监控状态和修改配置。
- 还可以加个自动扩容的功能,如果资源不够就自动增加服务器。
这回的“守护2”升级算是一次不错的实践,也让我对服务器运维有了更深的理解。以后有时间再跟大家分享其他的实践记录。
还没有评论,来说两句吧...