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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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

相关文章
|
1月前
|
传感器 人工智能 JavaScript
Playwright实战:写UI自动化脚本,速度直接起飞
简介: 测试工程师老王因UI自动化问题深夜奋战,反映出传统测试工具的局限性。微软开源的Playwright凭借智能等待、跨域操作、移动端模拟与网络拦截等强大功能,正迅速取代Selenium,成为新一代自动化测试标准。其稳定高效的设计显著降低维护成本,助力企业构建高质量测试流程。
|
3月前
|
机器学习/深度学习 Kubernetes 监控
Kubernetes 节点故障自愈方案:结合 Node Problem Detector 与自动化脚本
本文深入探讨了Kubernetes节点故障自愈方案,结合Node Problem Detector(NPD)与自动化脚本,提供技术细节、完整代码示例及实战验证。文章分析了硬件、系统和内核层面的典型故障场景,指出现有监控体系的局限性,并提出基于NPD的实时事件捕获与自动化诊断树的改进方案。通过深度集成NPD、设计自动化修复引擎以及展示内核死锁恢复的实战案例,文章详细说明了自愈流程的实现步骤与性能优势。此外,还提供了生产环境部署指南、高可用架构设计及安全防护措施,并展望了机器学习增强故障预测和混沌工程验证的进阶优化方向。全文约1.2万字,适合希望提升Kubernetes集群稳定性的技术人员阅读。
128 1
|
9月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
803 61
自动化微信朋友圈:Python脚本实现自动发布动态
|
6月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
8月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
525 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
9月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
2128 1
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
8月前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
9月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
8天前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
33 4
|
2月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。