Files
SuperBizAgent-java/aiops-docs/disk_high_usage.md
2026-04-30 11:19:46 +08:00

344 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 磁盘使用率过高告警处理方案
## 告警名称
- **告警名**: `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)