Linux集群和自动化维2.6.3 监控类脚本

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
26天前
|
jenkins 持续交付
Jenkins自动化部署脚本
Jenkins自动化部署脚本
27 0
|
26天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
112 0
|
1月前
|
监控 网络协议 Shell
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
【Shell 命令集合 网络通讯 】Linux 监控和记录网络中ARP(Address Resolution Protocol)活动 arpwatch命令 使用指南
34 0
|
7天前
|
监控 Linux
linux监控指定进程
请注意,以上步骤提供了一种基本的方式来监控指定进程。根据你的需求,你可以选择使用不同的工具和参数来获取更详细的进程信息。
14 0
|
7天前
|
监控 Linux 网络安全
linux中启动rpc.rstat监控
请注意,rpc.rstatd服务通常用于收集远程系统的性能统计信息,例如CPU利用率、内存使用等。在使用rpc.rstatd服务之前,你应该确保了解其功能、用法和安全性,并根据需要进行适当的配置和调整。
7 0
|
14天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
【4月更文挑战第9天】本文探讨了Python在自动化测试中的应用,强调其作为热门选择的原因。Python拥有丰富的测试框架(如unittest、pytest、nose)以支持自动化测试,简化测试用例的编写与维护。示例展示了使用unittest进行单元测试的基本步骤。此外,Python还适用于集成测试、系统测试等,提供模拟外部系统行为的工具。在脚本编写实践中,Python的灵活语法和强大库(如os、shutil、sqlite3、json)助力执行复杂测试任务。同时,Python支持并发、分布式执行及与Jenkins、Travis CI等持续集成工具的集成,提升测试效率和质量。
|
15天前
|
监控 Java Linux
linux下监控java进程 实现自动重启服务
linux下监控java进程 实现自动重启服务
|
26天前
|
运维 监控 Linux
linux脚本自动化运维任务
Linux自动化运维通过脚本提升效率,涵盖服务管理(启停服务、异常恢复)、系统监控(资源警报)、日志管理(清理分析)、备份恢复、补丁更新、自动化部署(如Ansible)、网络管理、定时任务(cron)和故障排查。结合shell、Python及工具,形成高效运维体系。
21 3
|
27天前
|
存储 Unix Shell
【简化Cmake编译过程 】编写通用的bash脚本:简化和构建cmake高效自动化任务
【简化Cmake编译过程 】编写通用的bash脚本:简化和构建cmake高效自动化任务
42 0
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统设置 】Linux 管理和监控电源管理 apmd命令 使用指南
【Shell 命令集合 系统设置 】Linux 管理和监控电源管理 apmd命令 使用指南
28 0

热门文章

最新文章