前言
此脚本用来监控服务器磁盘容量实现钉钉告警功能
一、编写Shell脚本
- 创建脚本存放目录,存放在**/data/shell**下
mkdir -p /data/shell
vim /data/shell/DingTalk_Alert
#!/bin/bash
#设定告警峰值,设置三个峰值,也可以设置一个或多个
Disk_ls=(80 90 99)
#这里更换钉钉的tokenid,复制粘贴过来
tokenid="2435654756567567456765756476"
#以下就不用动了
New_all=$(echo ${Disk_ls[*]} | tr ' ' '\n' | sort -n)
New=$(echo $New_all | awk -F" " '{print $1}')
Servser_(){
rpm -qa | grep ^$1 >> /dev/null
if [ $? -ne 0 ]; then
yum install $1 -y
fi
}
Servser_ net-tools
Servser_ bc
HostIP_()
{
machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`")
for i in $machine_physics_net; do
IP_=$(ip addr | grep $i | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
if [ ! -z $IP_ ]; then
echo " $i: $IP_"
fi
done
}
fun(){
curl "https://oapi.dingtalk.com/robot/send?access_token=$tokenid" \
-H "Content-Type: application/json" \
-d "{'msgtype': 'text', 'text': {'content': '$7\n告警主机:\n$1\n告警时间:$2\n告警事件:$3\n总容量:$4\n已使用:$5\n可使用:$6'}}" > /dev/null
}
Alarm_recovery(){
Date=`date +"%Y-%m-%d %H:%M:%S"`
if [ $1 -ge $2 ]; then
echo ${variable_list[*]} | grep -w $3$2 >> /dev/null
if [ $? -eq 1 ]; then
variable_list[${#variable_list[*]}]=$3$2
print_Alarm="$3 使用率大于$2%,请尽快处理"
fun "$HostIP" "$Date" "$print_Alarm" "$4" "$5" "$6" "[流鼻血] 【Disk 触发告警】"
fi
else
echo ${variable_list[*]} | grep -w $3$2 >> /dev/null
if [ $? -eq 0 ]; then
variable_list=("${variable_list[*]/"$3$2"}")
Recovery="$3 告警恢复"
if [ "$3$2" == "$3$7" ]; then
fun "$HostIP" "$Date" "$Recovery" "$4" "$5" "$6" "[加油] 【Disk 告警恢复】"
fi
fi
fi
}
Df_Th(){
DF=(`df -Th | grep -w $1$`)
echo ${DF[$2]}
}
while true
do
sleep 3
HostIP=$(HostIP_)
Mountdisk=`lsblk | grep -v /snap | grep -v /boot | grep -v swap | grep -v loop0 | awk -F" " '{print $7}' | grep -v "^$" | awk 'NR!=1 {print}' | sort -u`
df -t nfs4 > /dev/null 2>&1
if [ $? -eq 0 ];then
Nfs4_all=`df -t nfs4 | awk 'NR!=1 {print}' | awk -F" " '{print $NF}'`
Mountdisk="$Mountdisk $Nfs4_all"
fi
for i in $Mountdisk; do
Usei=$(Df_Th $i 5)
Use=`echo $Usei | awk -F % '{print $1}'`
Avail=$(Df_Th $i 4)
Used=$(Df_Th $i 3)
Size=$(Df_Th $i 2)
for x in $New_all;do
Alarm_recovery "$Use" "$x" "$i" "$Size" "$Used" "$Avail" "$New"
done
done
done
二、编写启动文件,实现开机自启
- 编写启动文件,实现开机自启
vim /usr/lib/systemd/system/DingDing.service
[Unit]
Description=DingDing
[Service]
Type=simple
WorkingDirectory=/data/shell/
ExecStart=/usr/bin/bash DingTalk_Alert
ExecStop=/usr/bin/ps -ef | /usr/bin/grep "bash" | /usr/bin/grep "DingTalk_Alert" | /usr/bin/awk '{print $2}' | /usr/bin/xargs/usr/bin/kill -9
User=root
Group=root
[Install]
WantedBy=multi-user.target
- 设置开机自启
systemctl restart DingDing.service
systemctl enable DingDing.service
机器人需要添加关键词,不然有问题哦
效果图
结言
关于监控服务器磁盘告警就写到这里了,理论上可以在不同系统服务中监控,稍微修改下就可以了。