在日常的服务器维护中,硬盘容量的监控是非常重要的。如果硬盘容量超过某个阈值,可能会导致服务器无法正常运行,影响业务的正常运作。为了避免这种情况,我们可以编写一个Shell脚本,定期检查硬盘容量,当超过设定的阈值时,通过钉钉推送告警消息给管理员,以便及时处理。

本文将介绍如何实现这个功能,并提供详细的步骤和代码示例。

实现思路

  1. 定义监控阈值和目标目录
    • 确定要监控的硬盘分区或目录,并设定一个合理的使用率阈值(如80%)。
  2. 编写Shell脚本
    • 编写脚本检查目标目录的硬盘使用情况。
    • 当使用率超过设定的阈值时,构建告警消息。
    • 使用curl命令将告警消息发送到钉钉。

钉钉机器设置

钉钉机器人配置请参考这篇文章

编写Shell脚本

以下是监控硬盘容量并通过钉钉发送告警的Shell脚本:

#!/bin/bash

# 设置警告阈值
THRESHOLD=20

#钉钉WEBHOOK_URL
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=$DingDingToken"


# 筛选需要检查的磁盘并进行检查
df -lPh | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
  used=$(echo $output | awk '{print $1}' | cut -d'%' -f1)
  partition=$(echo $output | awk '{print $2}'| head -n 1)

  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> $( hostname -I | awk '{print $1}') </font> \n
>  ##### <font color=#67C23A> 【告警时间】</font> :<font color=#FF0000> $(date +"%Y-%m-%d %H:%M:%S") </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
  fi
done

脚本使用

把上述的代码,拷贝到服务器上,新建一个名为disk_usage_check.sh,并赋予执行的权限,本案为了测试,把硬盘的阈值设置了20%。当我们执行脚本后,钉钉就会收到如下图的一条告警。

root@racknerd-a7aa50:~/script# ./disk_usage_check.sh

设置定时任务

为了定期执行这个脚本,可以将其添加到crontab中。使用以下命令编辑crontab

crontab -e

在打开的编辑器中添加以下内容,每小时检查一次硬盘容量:

0 * * * * /root/script/disk_usage_check.sh

/root/script/cript.sh替换为实际脚本的路径。

总结

通过上述思路,我们实现了一个简单的硬盘容量监控脚本,能够在硬盘使用率超过设定的阈值时,通过钉钉发送告警消息。这种方式能够帮助管理员及时发现和处理服务器硬盘空间不足的问题,保障服务器的稳定运行。您可以根据实际需求调整阈值和检测频率,并结合其他监控手段,构建更加完善的服务器监控体系。