场景说明

服务器里有个挂载目录,因为不是本机磁盘所以没法做磁盘告警,只能自己写shell脚本进行判断当利用率大于阈值以后,发送邮件进行提醒,所以瞎编了下面这么个脚本,因为脚本中会调用本级发送邮件应用,所以执行前需要安装程序

#安装命令,根据系统进行执行即可

#Centos 7
yum install -y mailx sendmail

#Rocky Linux 8
dnf install -y mailx sendmail

脚本内容

#!/bin/bash
#author: Anger

#判断参数个数,不是2个参数就推出脚本
if [ $# -ne 2 ]; then
    echo "错误:参数不正确"
    echo "用法:$0 <监控目录> <触发阈值百分比>"
    echo "示例:$0 /var/log 85"
    exit 1
fi

#传入要监控的目录
TARGET_DIR=$1
#传入告警阈值
THRESHOLD=$2
#获取当前时间
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")

if [ ! -d "$TARGET_DIR" ]; then
    echo "[$TIMESTAMP] 错误:目录 $TARGET_DIR 不存在"
    exit 1
fi

if ! [[ "$THRESHOLD" =~ ^[0-9]+$ ]] || [ "$THRESHOLD" -gt 100 ]; then
    echo "[$TIMESTAMP] 错误:阈值必须为0-100的整数"
    exit 1
fi

#USAGE=$(
#    df -P "$TARGET_DIR" 2>/dev/null | awk 'NR==2 {
#        gsub(/%/, "", $5)
#        print $5
#    }'
#)
#if [ -z "$USAGE" ]; then
#    echo "[$TIMESTAMP] 错误:无法获取目录使用率"
#    exit 1
#fi

#获取监控目录当前使用率
DIR_SIZE=$(du -s --block-size=1G $TARGET_DIR | awk '{print $1}')

RECIPIENT="10000@qq.com"

#判断当监控目录使用率大于阈值后,调用sendmail发送邮件
if [ ${DIR_SIZE} -gt ${THRESHOLD} ]; then

        echo "磁盘目录 $TARGET_DIR 使用率已达 ${DIR_SIZE}G,超过阈值 ${THRESHOLD}G" | \
        mail -s "【紧急告警】磁盘空间不足"  "$RECIPIENT"
fi

邮件大概是这个样子的

脚本增加可执行权限,定时执行就可以了