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