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