shell实现web服务进程监控并自动重启
0 Comments一、目的需求
根据业务需要,目前负责维护的产品形式基本是属于分布式的,有多个web服务部署在不同项目现场,针对这些web服务的维护就成了比较麻烦的事情。为了保障系统服务,之前已经采用LNMP+zabbix的方案搭建了一套web服务监控系统,可以方便的查看各项目的web服务状态,方便及时发现问题并解决。
采用Grafana的前端监控界面(比zabbix自带的图表好看点 - -):
不过虽然有zabbix贴心的监控和提醒(实际上由于网络不稳定或等等玄学因素,冗余警告非常多,多了就烦了。。。),但是解决具体问题还是需要远程到项目现场进行,特别是一些进程运行时间久了之后的异常,或者数据库连接异常断开等,简单重启一下web服务即可解决。但是,问题频繁了之后就很浪费时间了,于是打算通过shell来监控各项目地的web服务并实现异常自动重启,作为程序猿,当然要用代码来偷懒啦~(懒惰是三大生产力之一)
二、分析过程
思路如下:
1.定时执行monitor监控脚本,获取服务状态;
2.monitor功能:
|
|
逻辑很简单清楚,貌似很容易,不过这里有一个问题,如何判定web服务异常?
根据实际经验,异常常见原因共如下几种:
1.web服务进程莫名挂掉;
2.web服务数据库连接失败,多次尝试后挂起;
3.项目地网络出现波动;(不用吐槽,教育网还有偏远地区是这样的,指不定哪天光纤被挖断或者交换机故障(╯▽╰))
对应解决方案:
1.判断进程是否存在,不存在则重启web服务;
2.这个直接通过shell不好判断,借鉴了之前在zabbix做http监控时的方法,通过模拟登录的方式,登录一个测试页面,获取http_code,若200则正常,非200则属于异常。
3.这个可以通过判断本地服务,如果本地访问无问题则正常。
三、代码实现
monitor逻辑分析清楚了,可以开始进行了,其中模拟登录使用curl来获取http_code。
|
|
执行成功的日志记录:
记录了PID和启动时间,前面几条就是因为未加入sleep获取Pid失败,显示为空了
四、安装部署
部署到服务器后只需要在crontab添加任务,定时执行就行了:
[root@localhost ybg]# crontab -e
添加web服务监控,每5分钟一次,可根据实际要求修改监控频率.
|
|
添加完毕后,可以手动kill -9 pid来测试监控是否正常运行。提示:测试时注意生产环境哦,如果服务宕了被老板请去喝茶就不好啦~✧(≖ ◡ ≖✿)