1. 首页 > Linux教程 > 正文

Linux教程FG090-系统磁盘空间监控与告警脚本

本文档风哥主要介绍系统磁盘空间监控与告警脚本的编写与配置,包括磁盘空间监控的概念、监控脚本设计、告警机制配置、定时任务设置等内容,参考RHEL 10官方文档,适合系统管理员在生产环境中使用。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 磁盘空间监控的概念

磁盘空间监控是指对系统磁盘使用情况进行实时或定期检查,当磁盘使用率超过预设阈值时触发告警通知。磁盘空间监控是系统运维的重要组成部分,能够有效防止因磁盘空间不足导致的服务中断。

磁盘空间监控的核心要素:

  • 监控对象:根分区、数据分区、日志分区等
  • 监控指标:使用率、可用空间、inode使用率
  • 告警阈值:警告阈值、严重阈值
  • 通知方式:邮件、短信、钉钉、企业微信等
  • 监控频率:实时、每分钟、每小时、每天

1.2 磁盘空间监控的重要性

磁盘空间监控的重要性体现在以下几个方面:

  • 预防服务中断:提前发现磁盘空间不足,避免服务停止
  • 数据保护:防止因磁盘满导致数据丢失或损坏
  • 性能优化:及时发现异常增长,优化存储使用
  • 合规要求:满足运维监控的合规性要求
  • 自动化运维:减少人工巡检,提高运维效率

1.3 告警机制与通知方式

常见的告警机制与通知方式:

  • 邮件告警:通过SMTP发送邮件通知
  • 短信告警:通过短信网关发送短信
  • 即时通讯:钉钉、企业微信、Slack等
  • 日志记录:记录告警信息到日志文件
  • 系统通知:通过系统消息或桌面通知
风哥提示:磁盘空间监控是系统运维的基础工作,建议在生产环境中配置完善的监控告警机制。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 磁盘空间阈值规划

磁盘空间阈值规划建议:

# 磁盘空间阈值规划
# 根分区(/)
– 警告阈值:80%
– 严重阈值:90%
– 关键阈值:95%

# 数据分区(/data)
– 警告阈值:75%
– 严重阈值:85%
– 关键阈值:90%

# 日志分区(/var/log)
– 警告阈值:70%
– 严重阈值:80%
– 关键阈值:85%

# 临时分区(/tmp)
– 警告阈值:80%
– 严重阈值:90%
– 关键阈值:95%

# 备份分区(/backup)
– 警告阈值:85%
– 严重阈值:90%
– 关键阈值:95%

2.2 监控策略与频率

监控策略与频率建议:

# 监控策略
# 实时监控:适用于关键系统
– 监控频率:每1-5分钟
– 适用场景:核心数据库、关键应用

# 高频监控:适用于重要系统
– 监控频率:每10-30分钟
– 适用场景:Web服务器、应用服务器

# 中频监控:适用于一般系统
– 监控频率:每1-2小时
– 适用场景:开发环境、测试环境

# 低频监控:适用于次要系统
– 监控频率:每天1-2次
– 适用场景:备份服务器、归档服务器

# 监控内容
– 磁盘使用率
– 可用空间大小
– inode使用率
– 磁盘增长趋势

2.3 告警渠道配置

告警渠道配置建议:

  • 邮件告警:配置SMTP服务器,设置收件人列表
  • 短信告警:对接短信网关API,设置接收手机号
  • 即时通讯:配置钉钉机器人、企业微信机器人
  • 日志记录:记录到/var/log/disk_monitor.log
  • 分级告警:根据严重程度选择不同的通知渠道
生产环境建议:建议配置多渠道告警,确保告警信息能够及时送达。关键系统建议使用短信+即时通讯双重告警。更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

3.1 监控脚本设计

磁盘空间监控脚本设计要点:

# 脚本功能设计
# 1. 检查指定分区的磁盘使用率
# 2. 与预设阈值进行比较
# 3. 超过阈值时触发告警
# 4. 支持多分区监控
# 5. 支持多种告警方式
# 6. 记录监控日志
# 7. 支持配置文件

# 脚本结构设计
#!/bin/bash
# 1. 配置部分:定义阈值、邮件、短信等配置
# 2. 检查部分:获取磁盘使用率
# 3. 判断部分:与阈值比较
# 4. 告警部分:发送告警通知
# 5. 日志部分:记录监控结果

3.2 监控脚本实现

3.2.1 创建磁盘空间监控脚本

# 1. 创建监控脚本目录
# mkdir -p /opt/scripts/disk_monitor

# 2. 创建监控脚本
# cat > /opt/scripts/disk_monitor/disk_monitor.sh << 'EOF' #!/bin/bash # 磁盘空间监控脚本 # 作者:fgedu # 日期:2026-04-02 # 配置部分 ALERT_EMAIL="admin@example.com" SMTP_SERVER="smtp.example.com" SMTP_PORT="587" SMTP_USER="alert@example.com" SMTP_PASS="password" LOG_FILE="/var/log/disk_monitor.log" CONFIG_FILE="/opt/scripts/disk_monitor/disk_monitor.conf" # 默认阈值 WARNING_THRESHOLD=80 CRITICAL_THRESHOLD=90 # 创建日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # 创建分隔线函数 separator() { echo "==========================================" | tee -a "$LOG_FILE" } # 检查磁盘使用率函数 check_disk_usage() { local mount_point=$1 local usage=$(df -h "$mount_point" | awk 'NR==2 {print $5}' | sed 's/%//') echo "$usage" } # 发送邮件告警函数 send_email_alert() { local subject=$1 local message=$2 echo "$message" | mail -s "$subject" "$ALERT_EMAIL" } # 主监控函数 monitor_disk() { local mount_point=$1 local warning=$2 local critical=$3 separator log "开始监控磁盘:$mount_point" log "警告阈值:$warning%,严重阈值:$critical%" local usage=$(check_disk_usage "$mount_point") log "当前使用率:$usage%" if [ "$usage" -ge "$critical" ]; then local subject="[严重告警] 磁盘空间不足:$mount_point 使用率 $usage%" local message="磁盘 $mount_point 使用率已达到 $usage%,超过严重阈值 $critical%!\n\n请立即处理!" send_email_alert "$subject" "$message" log "严重告警:已发送邮件通知" elif [ "$usage" -ge "$warning" ]; then local subject="[警告告警] 磁盘空间不足:$mount_point 使用率 $usage%" local message="磁盘 $mount_point 使用率已达到 $usage%,超过警告阈值 $warning%。\n\n请及时处理!" send_email_alert "$subject" "$message" log "警告告警:已发送邮件通知" else log "磁盘使用率正常" fi separator } # 开始监控 separator log "磁盘空间监控任务开始" separator # 监控根分区 monitor_disk "/" 80 90 # 监控数据分区 if [ -d "/data" ]; then monitor_disk "/data" 75 85 fi # 监控日志分区 monitor_disk "/var/log" 70 80 # 监控临时分区 monitor_disk "/tmp" 80 90 separator log "磁盘空间监控任务完成" separator exit 0 EOF # 3. 设置执行权限 # chmod +x /opt/scripts/disk_monitor/disk_monitor.sh # 4. 创建日志目录 # mkdir -p /var/log # touch /var/log/disk_monitor.log # chmod 644 /var/log/disk_monitor.log # 5. 测试脚本 # /opt/scripts/disk_monitor/disk_monitor.sh ========================================== [2026-04-02 10:00:00] 磁盘空间监控任务开始 ========================================== ========================================== [2026-04-02 10:00:00] 开始监控磁盘:/ [2026-04-02 10:00:00] 警告阈值:80%,严重阈值:90% [2026-04-02 10:00:00] 当前使用率:65% [2026-04-02 10:00:00] 磁盘使用率正常 ========================================== ========================================== [2026-04-02 10:00:00] 开始监控磁盘:/data [2026-04-02 10:00:00] 警告阈值:75%,严重阈值:85% [2026-04-02 10:00:00] 当前使用率:78% [2026-04-02 10:00:00] 当前使用率:78% [2026-04-02 10:00:00] 警告告警:已发送邮件通知 ========================================== ========================================== [2026-04-02 10:00:00] 开始监控磁盘:/var/log [2026-04-02 10:00:00] 警告阈值:70%,严重阈值:80% [2026-04-02 10:00:00] 当前使用率:55% [2026-04-02 10:00:00] 磁盘使用率正常 ========================================== ========================================== [2026-04-02 10:00:00] 开始监控磁盘:/tmp [2026-04-02 10:00:00] 警告阈值:80%,严重阈值:90% [2026-04-02 10:00:00] 当前使用率:45% [2026-04-02 10:00:00] 磁盘使用率正常 ========================================== ========================================== [2026-04-02 10:00:00] 磁盘空间监控任务完成 ==========================================

3.3 定时任务配置

3.3.1 配置cron定时任务

# 1. 编辑crontab
# crontab -e

# 2. 添加定时任务(每30分钟执行一次)
*/30 * * * * /opt/scripts/disk_monitor/disk_monitor.sh >/dev/null 2>&1

# 3. 查看定时任务
# crontab -l
*/30 * * * * /opt/scripts/disk_monitor/disk_monitor.sh >/dev/null 2>&1

# 4. 查看cron服务状态
# systemctl status crond
● crond.service – Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2026-04-02 09:00:00 CST; 1h 0min ago
Main PID: 1234 (crond)
Tasks: 1 (limit: 4915)
Memory: 2.5M
CGroup: /system.slice/crond.service
└─1234 /usr/sbin/crond -n

Apr 02 09:00:00 server1 systemd[1]: Started Command Scheduler.
Apr 02 09:00:00 server1 crond[1234]: (CRON) INFO (pidfile fd = 3)
Apr 02 09:00:00 server1 crond[1234]: (CRON) INFO (Running @reboot jobs)

# 5. 查看cron日志
# tail -f /var/log/cron
Apr 02 10:00:00 server1 CROND[5678]: (root) CMD (/opt/scripts/disk_monitor/disk_monitor.sh >/dev/null 2>&1)
Apr 02 10:30:00 server1 CROND[5679]: (root) CMD (/opt/scripts/disk_monitor/disk_monitor.sh >/dev/null 2>&1)
Apr 02 11:00:00 server1 CROND[5680]: (root) CMD (/opt/scripts/disk_monitor/disk_monitor.sh >/dev/null 2>&1)

风哥提示:定时任务配置时,建议将输出重定向到/dev/null,避免cron发送邮件。如果需要调试,可以先输出到日志文件。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 邮件告警配置

4.1.1 配置邮件发送功能

# 1. 安装mailx工具
# dnf install -y mailx
Updating Subscription Management repositories.
Last metadata expiration check: 0:30:00 ago on Fri 02 Apr 2026 09:30:00 AM CST.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
mailx x86_64 12.5-29.el10 baseos 245 k

Transaction Summary
================================================================================
Install 1 Package

Total download size: 245 k
Installed size: 525 k
Downloading Packages:
mailx-12.5-29.el10.x86_64.rpm 245 kB/s | 245 kB 00:00
——————————————————————————–
Total 245 kB/s | 245 kB 00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : mailx-12.5-29.el10.x86_64 1/1
Running scriptlet: mailx-12.5-29.el10.x86_64 1/1
Verifying : mailx-12.5-29.el10.x86_64 1/1

Installed:
mailx-12.5-29.el10.x86_64

Complete!

# 2. 配置邮件发送
# cat > /etc/mail.rc << 'EOF' set from=alert@example.com set smtp=smtp.example.com:587 set smtp-auth-user=alert@example.com set smtp-auth-password=password set smtp-auth=login EOF # 3. 测试邮件发送 # echo "测试邮件内容" | mail -s "测试邮件" admin@example.com # 4. 查看邮件日志 # tail -f /var/log/maillog Apr 02 10:00:00 server1 postfix/smtp[1234]: 1234567890: to=, relay=smtp.example.com[192.168.1.100]:587, delay=0.5, delays=0.1/0.1/0.2/0.1, dsn=2.0.0, status=sent (250 2.0.0 OK)

4.2 短信告警配置

4.2.1 配置短信告警功能

# 1. 创建短信发送脚本
# cat > /opt/scripts/disk_monitor/send_sms.sh << 'EOF' #!/bin/bash # 短信发送脚本 # 作者:fgedu # 日期:2026-04-02 # 配置部分 SMS_API_URL="http://sms.example.com/api/send" SMS_API_KEY="your_api_key" SMS_PHONE="13800138000" # 发送短信函数 send_sms() { local message=$1 curl -X POST "$SMS_API_URL" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $SMS_API_KEY" \ -d "{\"phone\":\"$SMS_PHONE\",\"message\":\"$message\"}" } # 测试短信发送 send_sms "测试短信:磁盘空间监控告警" EOF # 2. 设置执行权限 # chmod +x /opt/scripts/disk_monitor/send_sms.sh # 3. 修改监控脚本,添加短信告警 # 在send_email_alert函数后添加send_sms_alert函数 # 4. 测试短信发送 # /opt/scripts/disk_monitor/send_sms.sh {"code":200,"message":"发送成功","data":{"sms_id":"1234567890"}}

4.3 常见问题排查

4.3.1 磁盘空间监控脚本问题排查

# 问题1:脚本无法执行
# 检查脚本权限
# ls -l /opt/scripts/disk_monitor/disk_monitor.sh
-rwxr-xr-x 1 root root 2048 Apr 2 10:00 /opt/scripts/disk_monitor.sh

# 检查脚本语法
# bash -n /opt/scripts/disk_monitor/disk_monitor.sh

# 问题2:邮件无法发送
# 检查mailx配置
# cat /etc/mail.rc

# 测试邮件发送
# echo “test” | mail -s “test” admin@example.com

# 查看邮件日志
# tail -f /var/log/maillog

# 问题3:cron任务不执行
# 检查cron服务状态
# systemctl status crond

# 查看cron日志
# tail -f /var/log/cron

# 检查crontab配置
# crontab -l

# 问题4:磁盘使用率获取错误
# 手动测试df命令
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 65G 35G 65% /

# 测试awk命令
# df -h / | awk ‘NR==2 {print $5}’
65%

# 问题5:日志文件无法写入
# 检查日志文件权限
# ls -l /var/log/disk_monitor.log
-rw-r–r– 1 root root 2048 Apr 2 10:00 /var/log/disk_monitor.log

# 检查日志目录权限
# ls -ld /var/log
drwxr-xr-x 1 root root 4096 Apr 2 09:00 /var/log

生产环境建议:建议定期检查监控脚本的运行状态,确保告警机制正常工作。可以配置监控系统本身的监控,防止监控脚本失效。更多视频教程www.fgedu.net.cn

Part05-风哥经验总结与分享

5.1 监控最佳实践

磁盘空间监控最佳实践:

  • 多分区监控:监控所有重要分区,不要遗漏
  • 合理阈值:根据业务需求设置合适的阈值
  • 多渠道告警:配置邮件、短信、即时通讯等多种告警方式
  • 日志记录:记录所有监控和告警信息,便于追溯
  • 定期检查:定期检查监控脚本运行状态和告警机制
  • 自动化清理:配合日志清理、临时文件清理等自动化任务
  • 趋势分析:记录磁盘使用率历史数据,分析增长趋势

5.2 性能优化建议

监控脚本性能优化建议:

# 性能优化建议
# 1. 减少不必要的命令调用
# 使用变量缓存结果,避免重复执行

# 2. 优化监控频率
# 根据磁盘使用率动态调整监控频率
# 高使用率时增加监控频率,低使用率时降低频率

# 3. 使用更高效的命令
# 使用df -P替代df,避免行换行问题
# 使用awk替代多个管道命令

# 4. 并行监控
# 对于多个分区,可以使用并行监控提高效率

# 5. 缓存结果
# 缓存磁盘使用率结果,避免频繁查询

5.3 监控工具推荐

推荐的监控工具:

  • Zabbix:企业级监控系统,功能强大
  • Prometheus:云原生监控系统,适合容器环境
  • Nagios:经典监控系统,插件丰富
  • Grafana:可视化监控平台,支持多种数据源
  • Monit:轻量级监控工具,配置简单
风哥提示:磁盘空间监控是系统运维的基础工作,建议在生产环境中配置完善的监控告警机制。对于关键系统,建议使用专业的监控系统(如Zabbix、Prometheus)替代简单的脚本监控。学习交流加群风哥微信: itpux-com

本文档介绍了系统磁盘空间监控与告警脚本的编写与配置,包括监控脚本设计、告警机制配置、定时任务设置等内容。通过合理的监控配置,可以有效预防因磁盘空间不足导致的服务中断,保障系统稳定运行。更多学习教程公众号风哥教程itpux_com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息