# 磁盘使用率过高告警处理方案 ## 告警名称 - **告警名**: `HighDiskUsage` - **告警级别**: 警告(>80%)/ 严重(>90%) - **触发条件**: 磁盘使用率持续5分钟超过阈值 ## 问题描述 磁盘使用率过高会导致: - 无法写入新数据 - 日志无法记录 - 应用崩溃 - 数据库损坏 - 系统性能下降 ## 排查步骤 ### 步骤1: 获取当前时间 **工具**: `get_current_time` **目的**: 记录告警时间,用于日志查询 ### 步骤2: 查询系统磁盘使用情况 **工具**: `query_logs` **参数要求**: - **地域**: `ap-guangzhou` - **日志主题**: `system-metrics` - **时间范围**: 最近30分钟 - **查询条件**: `disk_usage:>80 OR disk_full:true` **查询示例**: ``` 地域: ap-guangzhou 日志主题: system-metrics 时间范围: [当前时间-30分钟] 到 [当前时间] 查询语句: disk_usage > 80 OR filesystem:full ``` ### 步骤3: 查询应用日志 **工具**: `query_logs` **参数要求**: - **地域**: `ap-guangzhou` - **日志主题**: `application-logs` - **查询条件**: `No space left on device OR disk full` ### 步骤4: 分析磁盘占用 从日志中分析: - 哪个目录占用空间最大 - 日志文件大小 - 临时文件数量 - 数据文件增长趋势 ## 常见原因分析 ### 原因1: 日志文件过大 **特征**: - /var/log 目录占用大量空间 - 应用日志文件持续增长 - 没有日志轮转或轮转失败 - 日志级别设置为DEBUG **处理方案**: 1. **立即清理**: ```bash # 查找大日志文件 find /var/log -type f -size +100M # 清空日志文件(保留文件) > /var/log/application.log # 压缩旧日志 gzip /var/log/*.log.1 # 删除旧日志 find /var/log -name "*.log.*" -mtime +7 -delete ``` 2. **配置日志轮转**: - 启用logrotate - 设置日志保留天数 - 配置日志压缩 - 限制单个日志文件大小 3. **优化日志级别**: - 生产环境使用INFO或WARN级别 - 避免打印大对象 - 减少不必要的日志 ### 原因2: 临时文件堆积 **特征**: - /tmp 目录占用大量空间 - 大量临时文件未清理 - 文件上传临时目录满 - 缓存文件过多 **处理方案**: 1. **清理临时文件**: ```bash # 查找大临时文件 find /tmp -type f -size +100M # 删除7天前的临时文件 find /tmp -type f -mtime +7 -delete # 清理应用临时目录 rm -rf /app/temp/* ``` 2. **定期清理**: - 设置定时任务清理临时文件 - 应用启动时清理旧临时文件 - 文件处理完成后立即删除 3. **优化临时文件使用**: - 使用流式处理避免临时文件 - 限制临时文件大小 - 使用内存缓存替代临时文件 ### 原因3: 数据文件增长过快 **特征**: - 数据库文件持续增长 - 业务数据量激增 - 没有数据归档策略 - 历史数据未清理 **处理方案**: 1. **数据清理**: - 删除过期数据 - 归档历史数据 - 清理测试数据 - 优化数据存储 2. **数据归档**: - 建立数据归档策略 - 定期归档历史数据 - 使用对象存储保存归档数据 - 实现冷热数据分离 3. **扩容磁盘**: - 如果是正常业务增长,扩容磁盘 - 使用云盘动态扩容 - 考虑分布式存储 ### 原因4: 备份文件占用空间 **特征**: - 备份目录占用大量空间 - 多个历史备份文件 - 备份文件未压缩 - 备份未转移到其他存储 **处理方案**: 1. **清理旧备份**: ```bash # 查找备份文件 find /backup -name "*.bak" -mtime +30 # 删除30天前的备份 find /backup -name "*.bak" -mtime +30 -delete ``` 2. **优化备份策略**: - 只保留最近N天的备份 - 压缩备份文件 - 备份到对象存储 - 实现增量备份 3. **备份转移**: - 将备份转移到专用存储 - 使用云存储服务 - 定期清理本地备份 ### 原因5: 应用缓存文件过多 **特征**: - 缓存目录占用大量空间 - 缓存文件未过期清理 - 缓存策略不合理 - 缓存命中率低 **处理方案**: 1. **清理缓存**: ```bash # 清理应用缓存 rm -rf /app/cache/* # 清理Maven缓存 rm -rf ~/.m2/repository # 清理Docker缓存 docker system prune -a ``` 2. **优化缓存策略**: - 设置缓存过期时间 - 限制缓存大小 - 实现LRU淘汰策略 - 使用Redis等外部缓存 ### 原因6: Docker镜像和容器占用 **特征**: - Docker占用大量磁盘空间 - 大量未使用的镜像 - 停止的容器未清理 - 容器日志过大 **处理方案**: 1. **清理Docker资源**: ```bash # 清理未使用的镜像 docker image prune -a # 清理停止的容器 docker container prune # 清理未使用的卷 docker volume prune # 清理所有未使用资源 docker system prune -a --volumes ``` 2. **限制容器日志**: - 配置日志驱动 - 限制日志文件大小 - 设置日志轮转 3. **优化镜像**: - 使用多阶段构建 - 减小镜像体积 - 定期清理旧镜像 ## 紧急处理措施 ### 立即操作(5分钟内) 1. **快速清理**: - 删除大日志文件 - 清理临时文件 - 删除不必要的文件 2. **释放空间**: ```bash # 查找最大的10个文件 du -ah / | sort -rh | head -n 10 # 查找最大的10个目录 du -h --max-depth=1 / | sort -rh | head -n 10 ``` 3. **紧急扩容**: - 如果无法快速清理,立即扩容磁盘 ### 短期措施(30分钟内) 1. **系统清理**: - 清理包管理器缓存 - 清理系统日志 - 清理core dump文件 2. **应用优化**: - 配置日志轮转 - 清理应用缓存 - 删除过期数据 3. **监控设置**: - 设置磁盘使用率告警 - 监控磁盘增长趋势 - 定期检查大文件 ### 长期优化 1. **自动化清理**: - 设置定时清理任务 - 实现自动日志轮转 - 自动归档历史数据 2. **容量规划**: - 根据业务增长规划容量 - 预留足够的磁盘空间 - 实现弹性扩容 3. **监控完善**: - 监控各目录磁盘使用 - 预测磁盘使用趋势 - 提前告警 ## 常用命令 ### 查看磁盘使用情况 ```bash # 查看磁盘使用率 df -h # 查看目录大小 du -sh /var/log # 查找大文件 find / -type f -size +1G # 查看inode使用情况 df -i ``` ### 清理命令 ```bash # 清空文件内容(保留文件) > /var/log/large.log # 删除N天前的文件 find /path -mtime +N -delete # 压缩日志文件 gzip /var/log/*.log # 清理包管理器缓存 yum clean all # CentOS apt-get clean # Ubuntu ``` ## 验证步骤 1. 确认磁盘使用率降到安全水平(<70%) 2. 检查应用运行正常 3. 验证日志可以正常写入 4. 确认数据库运行正常 5. 持续监控磁盘使用情况 ## 预防措施 1. **监控告警**: 设置60%预警,80%严重告警 2. **定期清理**: 每周自动清理临时文件和旧日志 3. **容量规划**: 根据增长趋势提前扩容 4. **日志管理**: 实施统一的日志管理策略 5. **数据归档**: 建立数据归档和清理机制 ## 相关告警 - `InodeFull`: inode耗尽 - `DiskIOHigh`: 磁盘IO过高 - `DiskReadOnly`: 磁盘只读 - `FileSystemError`: 文件系统错误 ## 联系方式 - **运维团队**: ops-team@company.com - **存储团队**: storage-team@company.com - **紧急电话**: 400-xxx-xxxx ## 参考文档 - [磁盘管理最佳实践](internal-docs/disk-management.md) - [日志管理规范](internal-docs/log-management.md) - [数据归档策略](internal-docs/data-archiving.md)