本文档风哥主要介绍系统磁盘空间监控与告警脚本的编写与配置,包括磁盘空间监控的概念、监控脚本设计、告警机制配置、定时任务设置等内容,参考RHEL 10官方文档,适合系统管理员在生产环境中使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 磁盘空间监控的概念
磁盘空间监控是指对系统磁盘使用情况进行实时或定期检查,当磁盘使用率超过预设阈值时触发告警通知。磁盘空间监控是系统运维的重要组成部分,能够有效防止因磁盘空间不足导致的服务中断。
- 监控对象:根分区、数据分区、日志分区等
- 监控指标:使用率、可用空间、inode使用率
- 告警阈值:警告阈值、严重阈值
- 通知方式:邮件、短信、钉钉、企业微信等
- 监控频率:实时、每分钟、每小时、每天
1.2 磁盘空间监控的重要性
磁盘空间监控的重要性体现在以下几个方面:
- 预防服务中断:提前发现磁盘空间不足,避免服务停止
- 数据保护:防止因磁盘满导致数据丢失或损坏
- 性能优化:及时发现异常增长,优化存储使用
- 合规要求:满足运维监控的合规性要求
- 自动化运维:减少人工巡检,提高运维效率
1.3 告警机制与通知方式
常见的告警机制与通知方式:
- 邮件告警:通过SMTP发送邮件通知
- 短信告警:通过短信网关发送短信
- 即时通讯:钉钉、企业微信、Slack等
- 日志记录:记录告警信息到日志文件
- 系统通知:通过系统消息或桌面通知
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
- 分级告警:根据严重程度选择不同的通知渠道
Part03-生产环境项目实施方案
3.1 监控脚本设计
磁盘空间监控脚本设计要点:
# 1. 检查指定分区的磁盘使用率
# 2. 与预设阈值进行比较
# 3. 超过阈值时触发告警
# 4. 支持多分区监控
# 5. 支持多种告警方式
# 6. 记录监控日志
# 7. 支持配置文件
# 脚本结构设计
#!/bin/bash
# 1. 配置部分:定义阈值、邮件、短信等配置
# 2. 检查部分:获取磁盘使用率
# 3. 判断部分:与阈值比较
# 4. 告警部分:发送告警通知
# 5. 日志部分:记录监控结果
3.2 监控脚本实现
3.2.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定时任务
# 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)
Part04-生产案例与实战讲解
4.1 邮件告警配置
4.1.1 配置邮件发送功能
# 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=
4.2 短信告警配置
4.2.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 磁盘空间监控脚本问题排查
# 检查脚本权限
# 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
Part05-风哥经验总结与分享
5.1 监控最佳实践
磁盘空间监控最佳实践:
- 多分区监控:监控所有重要分区,不要遗漏
- 合理阈值:根据业务需求设置合适的阈值
- 多渠道告警:配置邮件、短信、即时通讯等多种告警方式
- 日志记录:记录所有监控和告警信息,便于追溯
- 定期检查:定期检查监控脚本运行状态和告警机制
- 自动化清理:配合日志清理、临时文件清理等自动化任务
- 趋势分析:记录磁盘使用率历史数据,分析增长趋势
5.2 性能优化建议
监控脚本性能优化建议:
# 1. 减少不必要的命令调用
# 使用变量缓存结果,避免重复执行
# 2. 优化监控频率
# 根据磁盘使用率动态调整监控频率
# 高使用率时增加监控频率,低使用率时降低频率
# 3. 使用更高效的命令
# 使用df -P替代df,避免行换行问题
# 使用awk替代多个管道命令
# 4. 并行监控
# 对于多个分区,可以使用并行监控提高效率
# 5. 缓存结果
# 缓存磁盘使用率结果,避免频繁查询
5.3 监控工具推荐
推荐的监控工具:
- Zabbix:企业级监控系统,功能强大
- Prometheus:云原生监控系统,适合容器环境
- Nagios:经典监控系统,插件丰富
- Grafana:可视化监控平台,支持多种数据源
- Monit:轻量级监控工具,配置简单
本文档介绍了系统磁盘空间监控与告警脚本的编写与配置,包括监控脚本设计、告警机制配置、定时任务设置等内容。通过合理的监控配置,可以有效预防因磁盘空间不足导致的服务中断,保障系统稳定运行。更多学习教程公众号风哥教程itpux_com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
