磁盘空间检测怎报警?

wen 实用脚本 55

本文目录导读:

磁盘空间检测怎报警?

  1. 方案一:使用系统自带的工具 + 脚本(最通用、最灵活)
  2. 方案二:使用成熟的监控系统(专业、统一管理)
  3. 方案三:更现代化的通知方式(替代邮件)
  4. 一些关键的“好习惯”和建议
  5. 总结:选哪个方案?

磁盘空间检测报警通常通过监控系统自定义脚本实现,核心思路是:定期检查磁盘使用率,当超过某个阈值(如80%、90%)时,触发通知(邮件、短信、IM消息等)。

以下是几种常见且实用的实现方案:

使用系统自带的工具 + 脚本(最通用、最灵活)

适合对成本敏感、没有部署大型监控平台的环境,或需要自定义特定逻辑的场景。

(1) 核心命令(Linux/Unix 系统)

# 查看磁盘使用情况,-h 表示人类可读格式
df -h
# 只获取使用率(获取 / 分区的使用率,去掉 % 号)
df -h / | awk 'NR==2 {print $5}' | sed 's/%//'

(2) 一个简单的bash报警脚本

创建一个脚本 disk_alert.sh,设置为定时任务(cron)。

#!/bin/bash
# 配置:设置报警阈值(百分比),85%
THRESHOLD=85
# 要监控的分区列表(根据需要添加或修改)
PARTITIONS="/ /home /var"
# 接收报警的邮箱
EMAIL="admin@example.com"
# 循环检查每个分区
for PART in $PARTITIONS; do
    # 获取当前分区的使用率(整数)
    USAGE=$(df -h $PART | awk 'NR==2 {print $5}' | sed 's/%//')
    # 如果使用率大于等于阈值
    if [ $USAGE -ge $THRESHOLD ]; then
        # 获取具体的磁盘使用信息作为邮件正文
        DETAIL=$(df -h $PART)
        # 发送报警邮件(需要系统配置好 mail 命令,mailutils)
        echo "警告:分区 $PART 使用率已达 ${USAGE}%,超过阈值 ${THRESHOLD}%。\n详情:\n$DETAIL" | mail -s "磁盘空间报警 - $PART" $EMAIL
        # 或者使用 curl 发送到钉钉/企业微信机器人(见下方进阶)
    fi
done

(3) 设置定时任务(Crontab)

# 编辑 crontab
crontab -e
# 添加一行,每 5 分钟执行一次(注意脚本路径要写绝对路径)
*/5 * * * * /home/scripts/disk_alert.sh

使用成熟的监控系统(专业、统一管理)

如果有运维或监控团队,使用专业平台是最佳实践,可以做到可视化、历史趋势、批量注册、自动处理。

  • Prometheus + Grafana + AlertManager(云原生首选)

    • 使用 node_exporter 收集包含磁盘在内的系统指标。
    • 在 Prometheus 或 AlertManager 中配置报警规则:
      # 告警规则示例 (PrometheusRule)
      alert: DiskSpaceLow
      expr: (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100 > 85
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "磁盘空间不足 (实例 {{ $labels.instance }})"
        description: "根分区磁盘使用率已超过 85% (当前值: {{ $value }}%)"
    • 通过 AlertManager 发送到钉钉、邮件、Slack 等。
  • Zabbix / Nagios / Cacti(传统企业常用)

    自带“磁盘空间”监控模板,只需将主机加入监控,配置报警动作(Action)和媒介(Media,如邮件、短信网关)即可,这是最省事的方案之一。

  • 云厂商自带服务(阿里云、腾讯云、AWS、Azure)

    • 控制台报警:在云监控页面,选择“磁盘使用率”指标,设置阈值报警。
    • 云助手:在云服务器内配合脚本进行检测。
    • 优势:开箱即用,与云资源强绑定,不需要自己搭建基础设施。

更现代化的通知方式(替代邮件)

很多场景下,邮件不如即时通讯工具直观,以上脚本(方案一)可以轻松扩展。

(1) 发送到企业微信机器人

WEBHOOK_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"
curl -s -H "Content-Type: application/json" -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"磁盘报警:分区 $PART 使用率已超 ${THRESHOLD}%\"}}" $WEBHOOK_URL

(2) 发送到钉钉机器人

DINGTALK_URL="https://oapi.dingtalk.com/robot/send?access_token=你的token"
curl -s -H "Content-Type: application/json" -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"磁盘报警:分区 $PART 使用率已超 ${THRESHOLD}%\"}}" $DINGTALK_URL

(3) 发送 Pushbullet 或 Server酱(个人通知神器)

  • 这类服务通常是跑在公网上的手机App或小程序,你的服务器通过HTTPS调用其API,就能直接把报警推送到手机上。

一些关键的“好习惯”和建议

  1. 不要只监控根分区(/):** 业务数据通常放在 /data, /home, /var/log 等分区,它们的爆满风险往往比系统盘高得多,而且后果可能更直接(如日志写爆导致无报错闪退)。
  2. 设置不同的阈值:
    • WARNING (警告):85%,提醒你该清理了。
    • CRITICAL (严重):92-95%,需要立刻处理。
    • PANIC (灾难):97%+,系统或服务可能马上挂掉。
  3. 延迟报警(For/Duration): 磁盘使用率偶尔会因大文件写入瞬间飙升,但很快回落,不要因为一次采样就报警,可以设置为持续超过阈值N分钟(如5分钟)再触发,避免干扰。
  4. 结合日志轮转(Logrotate)使用: 磁盘报警不应只靠通知,最根本的预防措施是配置好日志切割。
    • 提前配置好 logrotatecronolog,对 /var/log/ 目录下的日志进行归档、压缩和清理,这样报警发生前,问题往往就被自动解决了。
  5. 紧急响应: 如果磁盘真的满了,服务已经受影响,往往报警反而收不到(比如系统连发送邮件的进程都无法启动),这时候可以考虑:
    • 紧急脚本(在内存中运行的检查)或通过带外监控(如IPMI、云控制台VNC)直接进服务器清理。
    • /root等系统保留分区预留少量空间(通常默认就有5%留给root,df命令里的使用率是基于100%总量的,注意到这一点)。

选哪个方案?

  • 个人/小团队、单台服务器方案一脚本 + 钉钉/企微机器人,0成本,5分钟就能搭好。
  • 中等规模、多台服务器、有运维基础Prometheus + Grafana + AlertManager 或 Zabbix,这是生产环境的标准答案,值得花时间投入。
  • 云上环境最省心:直接使用云监控控制台 + 报警规则,不需要自己写脚本,高可用性由云平台保障。

抱歉,评论功能暂时关闭!