commit
This commit is contained in:
@@ -0,0 +1,343 @@
|
||||
# 磁盘使用率过高告警处理方案
|
||||
|
||||
## 告警名称
|
||||
- **告警名**: `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)
|
||||
Reference in New Issue
Block a user