脚本

vim /usr/local/oemservice/disk_alert.sh

#!/bin/bash

# 不加签 Webhook 地址
WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=替换成你的token"

# 磁盘使用率阈值
THRESHOLD=80

# 日志文件路径
LOG_DIR="/usr/local/oemservice"
LOG_FILE="${LOG_DIR}/disk_alert.log"

# 确保日志目录存在
mkdir -p "$LOG_DIR"

# 钉钉发送函数,带日志输出
send_dingding() {
    local content="$1"

    local result=$(curl -s -w "\nHTTP_CODE:%{http_code}" "$WEBHOOK" \
        -H 'Content-Type: application/json' \
        -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"${content}\"}}" 2>&1)

    echo "$(date '+%Y-%m-%d %H:%M:%S') [钉钉推送] 内容: ${content}" >> "$LOG_FILE"
    echo "$(date '+%Y-%m-%d %H:%M:%S') [钉钉返回] ${result}" >> "$LOG_FILE"
}

# 检测磁盘使用率
check_disk() {
    df -hP | awk 'NR>1 {print $5 " " $6}' | while read usage mount; do
        percent=${usage%\%}
        if (( percent >= THRESHOLD )); then
            local message="服务器磁盘告警通知
主机: $(hostname)
挂载点: ${mount}
使用率: ${usage}
告警时间: $(date '+%Y-%m-%d %H:%M:%S')
请及时处理!"

            echo "$(date '+%Y-%m-%d %H:%M:%S') [告警触发] ${message}" >> "$LOG_FILE"

            send_dingding "${message}"
        else
            echo "$(date '+%Y-%m-%d %H:%M:%S') [检查通过] 挂载点: ${mount}, 使用率: ${usage}" >> "$LOG_FILE"
        fi
    done
}

echo "==================== $(date '+%Y-%m-%d %H:%M:%S') 检查开始 ====================" >> "$LOG_FILE"
check_disk
echo "==================== $(date '+%Y-%m-%d %H:%M:%S') 检查结束 ====================" >> "$LOG_FILE"

定时任务添加

crontab -e

添加以下内容:

5 14 * * * /usr/local/oemservice/disk_alert.sh >/dev/null 2>&1