Linux脚本监控
文章目录
服务器监控有专业的程序,比如springboot-admin。其实可以手工利用shell配合crond搭建一个轻量级的监控系统,云服务器不便宜,将内存和cpu还给应用系统,低碳运维从我走起。
磁盘监控
磁盘使用的增长速度一般可预期,达到阀值即报警,一天一次的频率足以,比如设置为凌晨1点。监控脚本示例如下:
#!/bin/bash
partition_list=(`df -h | awk 'NF>3&&NR>1{sub(/%/,"",$(NF-1));print $NF,$(NF-1)}'`)
critical=90 # 阀值
notification_email()
{
email_addr="用户名@liming.pub"
title="[Warn]xx服务器磁盘空间报警"
mail -s "$title" "${email_addr}"
}
crit_info=""
for (( i=0;i<${#partition_list[@]};i+=2 ))
do
if [ "${partition_list[((i+1))]}" -lt "$critical" ];then
echo "OK! ${partition_list[i]} used ${partition_list[((i+1))]}%"
else
if [ "${partition_list[((i+1))]}" -gt "$critical" ];then
crit_info=$crit_info"Warning!!! ${partition_list[i]} used ${partition_list[((i+1))]}%\n"
fi
fi
done
if [ "$crit_info" != "" ];then
echo "发送邮件报警:"$crit_info
echo -e $crit_info | notification_email # (1)
fi
-
发送邮件通知,可以参考 Linux发送邮件 博文。
MYSQL备库监控
备库如未投入生产,监控频率一天一次,如果投入生产,则需要频率高一点,比如5分钟一次。监控脚本示例如下:
#!/bin/bash
#define mysql variable
db_user=""
db_passwd=""
db_name=""
db_port=""
db_host=""
notification_email()
{
email_addr="用户名@liming.pub"
title="[Warn]xxMySQL出问题了"
mail -s "$title" "${email_addr}"
}
mysql_status=`netstat -lnt|grep ${db_port}|wc -l`
if [ "$mysql_status" -eq 1 ];then
slave_status_array=($(mysql -u${db_user} -p${db_passwd} -h${db_host} -P${db_port} -e "show slave status\G"|grep Running|awk -F : '{print $2}'))
if [ "${slave_status_array[0]}" == "Yes" ] && [ "${slave_status_array[1]}" == "Yes" ]; then
[ -f "/tmp/slave" ] && rm -f /tmp/slave
else
[ ! -f "/tmp/slave" ] && echo "MySQL主备同步失效!" | notification_email
touch /tmp/slave
fi
[ -f "/tmp/mysql_down" ] && rm -f /tmp/mysql_down
else
[ ! -f "/tmp/mysql_down" ] && echo "Mysql宕机!" | notification_email
touch /tmp/mysql_down
fi
Redis监控
监控Redis进程,不存在则报警,并尝试重启。也可以使用 redis-cli
命令监控连接数。
#!/bin/bash
notification_email()
{
email_addr="用户名@liming.pub"
title="[ERROR]xxRedis宕机了"
mail -s "$title" "${email_addr}"
}
pid=$(ps -ef | grep redis-server | grep -v grep | awk '{print $2}')
if [ "$pid" = '' ]; then
echo "Redis-Server xx 宕机,尝试重启!" | notification_email
redis-server /etc/redis.conf &
fi
通用监控
可以使用 curl
来实现远程http服务的监控,使用 netstat
来实现本机服务端口的监控,具体脚本后续完善。