一、需求说明
作为一名主机运维工程师,日常工作中我们每天都需要巡检服务器的运行情况,包括服务器的网络通断性、磁盘利用率、服务进程等内容。为了减少工作量我们可以通过编写shell脚本,实现服务器的批量巡检。写好脚本之后我们可以设置定时任务,将巡检结果邮件发送给自己就OK啦。我们查看磁盘利用率就是使用df -h的命令,可以显示各磁盘分区的使用情况,此脚本就是基于此命令基础实现。
————————————————
脚本主体内容如下:
#!/bin/bash
#scriptname: disk_check.sh
#author: wuhs
#description: 此脚本用于检查linux服务器的磁盘使用率,超过预警阈值则邮件告警
#version: v1.0
#参数定义
#脚本工作目录
resultfiledir=/root/scripts/xunjian/diskinfo
#待巡检服务器列表
hostlist="/root/scripts/xunjian/diskinfo/hosts.txt"
#告警阈值
warnsize=95
#切换到工作目录,定时任务执行时默认在bash路径下执行,所以需要在脚本中切换路径
curdir=`cd -P $(dirname $0); pwd`
cd $curdir
删除上一次执行记录,也可以执行完成脚本后删除,执行前删除是方便收到告警时人工核查
rm -rf $resultfiledir/df.txt
#通过while循环读取待巡检服务器列表
while read line
do
#获取带巡检主机名或者IP地址,建议主机名
host=`echo $line | awk '{print $1}'`
#获取待巡检主机ssh端口,考虑部分主机考虑安全修改了ssh服务端口
port=`echo $line | awk '{print $2}'`
#将当前巡检的主机写入巡检结果df.txt文件
echo "$host 磁盘检查结果" >> $resultfiledir/df.txt
#将获取到的df -h数据写入到df.txt文件,记得采用追加写入的方式
ssh $host -p $port -n df -h >> $resultfiledir/df.txt
done <"$hostlist"
#获取磁盘使用率列值
list=`cat df.txt |awk '{print int($5)}'`
rm -rf ls.txt
#使用率值与阈值进行比较
for val in $list
do
if [ "$val" -gt "$warnsize" ];then
#过滤大于阈值的磁盘结果行和主机名记录行
cat df.txt |egrep "磁盘检查|$val%" |egrep -B 1 "$val%" >> ls.txt
fi
done
#保证顺序的情况下删除重复项
awk '!a[$0]++' ls.txt > tmp.txt
rm -rf ls.txt
mv tmp.txt ls.txt
#发送告警邮件
if [ -s ls.txt ]; then
mailx -s "有超过磁盘使用率告警阈值$warnsize %的磁盘,请检查!"
1234567qq@qq.com < ls.txt
else
if [ $(date +%H) -eq 09 ];then
mailx -s "磁盘使用率检查结果正常!" 1234567qq@qq.com < df.txt
fi
fi
————————————————