Shell 脚本实现 Linux 磁盘空间超过阈值自动钉钉机器人告警
1、创建钉钉 Webhook 机器人
每个项目配置独立的机器人
安全设置这里我选用服务器出口IP
设定后,只有来自IP地址范围内的请求才会被正常处理
2、编写磁盘巡检脚本
vim /opt/disk_usage_check.sh
#!/bin/bash
# 设置警告阈值
THRESHOLD=80
# 钉钉机器人配置
DINGTALK_ACCESS_TOKEN=
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=$DINGTALK_ACCESS_TOKEN"
# 当前系统时间
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 获取主机名和IP
HOSTNAME=$(hostname)
IP=$(hostname -I)
# 筛选需要检查的磁盘并进行检查
df -lPh | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
used=$(echo $output | awk '{print $1}' | sed 's/[^0-9]//g')
partition=$(echo $output | awk '{print $2}')
# 确保used是一个有效的数字
if [[ "$used" =~ ^[0-9]+$ ]]; then
echo "Debug: Checking partition $partition with usage $used%"
# 判断磁盘使用量是否超过了阈值
if (( used >= THRESHOLD )); then
# 构建钉钉通知payload
PAYLOAD=$(cat <<-EOF
{
"msgtype": "markdown",
"markdown": {
"title":"Linux服务器磁盘空间告警",
"text":"
##### Linux服务器磁盘空间告警 \n
##### <font color=#67C23A> 【服务器: </font> <font color=#FF0000> $HOSTNAME</font>】 的磁盘空间超过阀值</font> :<font color=#FF0000> $THRESHOLD % </font> \n
##### <font color=#67C23A> 【服务器IP】</font> :<font color=#FF0000> $IP </font> \n
##### <font color=#67C23A> 【告警时间】</font> :<font color=#FF0000> $CURRENT_TIME </font> \n
##### <font color=#67C23A> 【预警分区】:<font color=#FF0000> $partition </font> 已使用 <font color=#FF0000>$used%</font> \n
> ##### <font color=#67C23A> 该分区具体 df -PTh 信息如下: </font> \n
##### <font color=#FF0000> $(df -lPTh | head -n 1) </font> \n
##### <font color=#FF0000> $(df -lPTh| grep $partition) </font> \n
"
}
}
EOF)
# 发送告警 (自行替换钉钉Webhook机器人的URL)
curl -H "Content-Type: application/json" -X POST -d "$PAYLOAD" $WEBHOOK_URL
echo $PAYLOAD
echo "钉钉告警已发送"
# 记录到系统日志
logger -t "disk_alert" "磁盘告警:分区 $partition 已使用 $used%"
fi
else
echo "Error: Invalid usage value for partition $partition: '$used'"
logger -t "disk_alert" "错误:分区 $partition 的使用值无效: '$used'"
fi
done
3、脚本权限设置及定时任务设置
授权文件
chmod 777 /opt/disk_usage_check.sh
设置定时任务
为了定期执行这个脚本,可以将其添加到crontab中。使用以下命令编辑crontab:
crontab -e
在打开的编辑器中添加以下内容,每小时检查一次硬盘容量:
# 每1个小时巡检一次
0 * * * * /opt/disk_usage_check.sh
# 每4个小时巡检一次
#0 */4 * * * /opt/disk_usage_check.sh
4、测试
df -PTh
找一个分区,以/boot分区为例
dd if=/dev/zero of=/boot/test.iso count=1 bs=300M
测试是否会触发告警
5、告警效果如下
作者:Jeebiz 创建时间:2025-03-26 09:28
最后编辑:Jeebiz 更新时间:2025-03-28 15:38
最后编辑:Jeebiz 更新时间:2025-03-28 15:38