Files
2026-04-30 11:19:46 +08:00

7.5 KiB
Raw Permalink Blame History

磁盘使用率过高告警处理方案

告警名称

  • 告警名: 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. 立即清理:

    # 查找大日志文件
    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. 清理临时文件:

    # 查找大临时文件
    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. 清理旧备份:

    # 查找备份文件
    find /backup -name "*.bak" -mtime +30
    
    # 删除30天前的备份
    find /backup -name "*.bak" -mtime +30 -delete
    
  2. 优化备份策略:

    • 只保留最近N天的备份
    • 压缩备份文件
    • 备份到对象存储
    • 实现增量备份
  3. 备份转移:

    • 将备份转移到专用存储
    • 使用云存储服务
    • 定期清理本地备份

原因5: 应用缓存文件过多

特征:

  • 缓存目录占用大量空间
  • 缓存文件未过期清理
  • 缓存策略不合理
  • 缓存命中率低

处理方案:

  1. 清理缓存:

    # 清理应用缓存
    rm -rf /app/cache/*
    
    # 清理Maven缓存
    rm -rf ~/.m2/repository
    
    # 清理Docker缓存
    docker system prune -a
    
  2. 优化缓存策略:

    • 设置缓存过期时间
    • 限制缓存大小
    • 实现LRU淘汰策略
    • 使用Redis等外部缓存

原因6: Docker镜像和容器占用

特征:

  • Docker占用大量磁盘空间
  • 大量未使用的镜像
  • 停止的容器未清理
  • 容器日志过大

处理方案:

  1. 清理Docker资源:

    # 清理未使用的镜像
    docker image prune -a
    
    # 清理停止的容器
    docker container prune
    
    # 清理未使用的卷
    docker volume prune
    
    # 清理所有未使用资源
    docker system prune -a --volumes
    
  2. 限制容器日志:

    • 配置日志驱动
    • 限制日志文件大小
    • 设置日志轮转
  3. 优化镜像:

    • 使用多阶段构建
    • 减小镜像体积
    • 定期清理旧镜像

紧急处理措施

立即操作(5分钟内)

  1. 快速清理:

    • 删除大日志文件
    • 清理临时文件
    • 删除不必要的文件
  2. 释放空间:

    # 查找最大的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. 监控完善:

    • 监控各目录磁盘使用
    • 预测磁盘使用趋势
    • 提前告警

常用命令

查看磁盘使用情况

# 查看磁盘使用率
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

验证步骤

  1. 确认磁盘使用率降到安全水平(<70%)
  2. 检查应用运行正常
  3. 验证日志可以正常写入
  4. 确认数据库运行正常
  5. 持续监控磁盘使用情况

预防措施

  1. 监控告警: 设置60%预警,80%严重告警
  2. 定期清理: 每周自动清理临时文件和旧日志
  3. 容量规划: 根据增长趋势提前扩容
  4. 日志管理: 实施统一的日志管理策略
  5. 数据归档: 建立数据归档和清理机制

相关告警

  • InodeFull: inode耗尽
  • DiskIOHigh: 磁盘IO过高
  • DiskReadOnly: 磁盘只读
  • FileSystemError: 文件系统错误

联系方式

参考文档