Linux集群和自动化维2.6.3 监控类脚本
2.6.3 监控类脚本
在生产环境下,服务器的稳定情况会直接影响公司的生意和信誉,可见其有多重要。所以,我们需要即时掌握服务器的状态,我们一般会在机房部署Nagios-Server作为监控程序,然后用Shell和Python根据业务需求开发监控插件,实时监控线上业务。
1. Nginx负载均衡服务器上监控Nginx进程的脚本
由于笔者公司电子商务业务网站前端的Load Balance用到了Nginx+Keepalived架构,而Keepalived无法进行Nginx服务的实时切换,所以设置了一个监控脚本nginx_pid.sh,每隔5秒钟就监控一次Nginx的运行状态(也可以由Superviored守护进程托管),如果发现有问题就关闭本机的Keepalived程序,让VIP切换到从Nginx负载均衡器上。在对线上环境进行操作的时候,人为地重启主Master的Nginx机器,从Nginx机器在很短的时间内就接管了VIP地址,即网站的实际内网地址(此内网地址可以通过防火墙映射为公网IP),进一步证实了此脚本的有效性,脚本内容如下(此脚本在CentOS 5.8/6.4 x86_64下均已测试通过):
#!/bin/bash
while :
do
nginxpid=`ps -C nginx --no-header | wc -l`
if [ $nginxpid -eq 0 ];then
ulimit -SHn 65535
/usr/local/nginx/sbin/nginx
sleep 5
if [ $nginxpid -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
sleep 5
done
2.系统文件打开数监测脚本
这个脚本比较方便,可用来查看Nginx进程下最大文件打开数,脚本代码如下(此脚本在CentOS 5.8/6.4 x86_64、Amazon Linux AMI x86_64下均已测试通过):
#!/bin/bash
for pid in `ps aux |grep nginx |grep -v grep|awk '{print $2}'`
do
cat /proc/${pid}/limits | grep 'Max open files'
done
脚本的运行结果如下所示:
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
Max open files 65535 65535 files
3.监测MySQL主从复制是否同步
笔者有不少基于公网类型的网站(没有硬件防火墙,直接置于IDC机房)采用的都是MySQL主从架构,从机主要起备份数据库和冷备份的作用,虽然从机宕机了问题不大,但也会影响到数据的备份工作;这样的网站有数十个,如果逐个手动检查,每天都要花费不少时间,所以也用了脚本监控。
脚本设计思路:
1)此脚本应该能适应各种各样不同的内外网环境,即IP不同的环境。
2)让脚本顺便也监控下MySQL是否正常运行。
3)Slave机器的IO和SQL状态都必须为YES,缺一不可,这里用到了多重条件判断-a。
脚本内容如下所示(此脚本在CentOS 5.8 x86_64下已测试通过):
#!/bin/bash
#check MySQL_Slave Status
#crontab time 00:10
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'`
MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
STATUS=$(/usr/local/webserver/mysql/bin/mysql -u yuhongchun -pyuhongchun101 -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running")
IO_env=`echo $STATUS | grep IO | awk ' {print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'`
if [ "$MYSQLPORT" == "3306" ]
then
echo "mysql is running"
else
mail -s "warn!server: $MYSQLIP mysql is down" yuhongchun027@163.com
fi
if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
echo "Slave is running!"
else
echo "####### $date #########">> /data/data/check_mysql_slave.log
echo "Slave is not running!" >> /data/data/check_mysql_slave.log
mail -s "warn! $MySQLIP_replicate_error" yuhongchun027@163.com << /data/data/check_mysql_slave.log
fi
建议每10分钟运行一次,脚本如下:
*/10 * * * * root /bin/sh /root/mysql_slave.sh
要记得在每台MySQL从机上分配一个yuhongchun的用户,权限大些也没关系,只限定在本地运行,脚本如下所示:
grant all privileges on *.* to "yuhongchun"@"127.0.0.1" identified by "yuhongchun101";
grant all privileges on *.* to "yuhongchun"@"localhost" identified by "yuhongchun101";
4.监控Python程序是否正常运行
需求比较简单,主要是监控业务进程rsync_redis.py是否正常运行,有没有发生crash的情况。另外,建议将类似于rsync_redis.py的重要业务进程交由Superviored守护进程托管。此脚本内容如下所示(此脚本在Amazon Linux AMI x86_64下已测试通过):
#!/bin/bash
sync_redis_status=`ps aux | grep sync_redis.py | grep -v grep | wc -l `
if [ ${sync_redis_status} != 1 ]; then
echo "Critical! sync_redis is Died"
exit 2
else
echo "OK! sync_redis is Alive"
exit 0
fi
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的