完成 Runbook 目录建设: - 05-config-update.md: 配置更新流程和回滚 - 06-security-incident.md: 安全事件分级和响应流程 - 07-incident-response.md: 服务事件分级和应急响应
251 lines
4.4 KiB
Markdown
251 lines
4.4 KiB
Markdown
# 事件响应 Runbook
|
|
|
|
## 触发条件
|
|
- 服务无响应
|
|
- 服务报错
|
|
- 性能严重下降
|
|
- 依赖服务故障
|
|
- 硬件/基础设施故障
|
|
|
|
## 事件分级
|
|
|
|
| 级别 | 说明 | 响应时间 | 示例 |
|
|
|------|------|----------|------|
|
|
| SEV1 | 服务完全不可用 | 立即 | 服务崩溃、数据库损坏 |
|
|
| SEV2 | 部分功能不可用 | 30分钟内 | 登录失败、API 超时 |
|
|
| SEV3 | 性能下降 | 2小时内 | 响应变慢、偶发错误 |
|
|
| SEV4 | 轻微问题 | 24小时内 | 日志错误、非关键功能异常 |
|
|
|
|
## SEV1 响应(服务完全不可用)
|
|
|
|
### 1. 确认事件
|
|
|
|
```bash
|
|
# 检查服务状态
|
|
docker compose ps
|
|
|
|
# 检查容器日志
|
|
docker compose logs --tail=100
|
|
|
|
# 检查系统资源
|
|
docker stats --no-stream
|
|
```
|
|
|
|
### 2. 收集信息
|
|
|
|
```bash
|
|
# 保存当前日志
|
|
docker compose logs > incident_logs_$(date +%Y%m%d_%H%M%S).txt
|
|
|
|
# 检查磁盘空间
|
|
df -h
|
|
|
|
# 检查内存
|
|
free -h
|
|
|
|
# 检查进程
|
|
ps aux | grep docker
|
|
```
|
|
|
|
### 3. 尝试重启
|
|
|
|
```bash
|
|
# 优雅重启
|
|
docker compose restart
|
|
|
|
# 等待 30 秒后检查
|
|
sleep 30
|
|
docker compose ps
|
|
curl http://localhost:8080/api/v1/health
|
|
```
|
|
|
|
### 4. 如果重启失败
|
|
|
|
```bash
|
|
# 查看详细错误
|
|
docker compose up
|
|
|
|
# 检查端口占用
|
|
lsof -i :8080
|
|
|
|
# 检查配置文件
|
|
cat ./configs/config.yaml
|
|
```
|
|
|
|
### 5. 数据库问题
|
|
|
|
```bash
|
|
# 检查数据库文件
|
|
ls -la ./data/
|
|
|
|
# 验证 SQLite 完整性
|
|
sqlite3 ./data/user_management.db "PRAGMA integrity_check;"
|
|
|
|
# 如果损坏,从备份恢复
|
|
./scripts/backup/backup.sh --restore
|
|
```
|
|
|
|
## SEV2 响应(部分功能不可用)
|
|
|
|
### 1. 确认问题范围
|
|
|
|
```bash
|
|
# 测试健康端点
|
|
curl http://localhost:8080/api/v1/health
|
|
|
|
# 测试登录
|
|
curl -X POST http://localhost:8080/api/v1/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"username":"test","password":"test"}'
|
|
|
|
# 查看错误日志
|
|
docker compose logs | grep -E "error|ERROR|fail|FAIL" | tail -50
|
|
```
|
|
|
|
### 2. 检查依赖
|
|
|
|
```bash
|
|
# 检查数据库连接
|
|
docker compose logs | grep -i "database"
|
|
|
|
# 检查外部服务(如邮件、短信)
|
|
docker compose logs | grep -i "external\|oauth\|sms\|email"
|
|
```
|
|
|
|
### 3. 针对性修复
|
|
|
|
```bash
|
|
# 如果是数据库连接问题
|
|
docker compose restart
|
|
|
|
# 如果是配置问题,更新配置后重启
|
|
vi ./configs/config.yaml
|
|
docker compose restart
|
|
|
|
# 如果是资源问题,清理资源
|
|
docker system prune -a
|
|
docker compose restart
|
|
```
|
|
|
|
## SEV3 响应(性能下降)
|
|
|
|
### 1. 诊断
|
|
|
|
```bash
|
|
# 查看实时资源使用
|
|
docker stats
|
|
|
|
# 检查慢请求
|
|
grep -E "[0-9]+ms" ./logs/app.log | awk '{if($NF ~ /[0-9]+ms/ && $NF+0 > 1000) print}' | head -20
|
|
|
|
# 检查数据库查询
|
|
sqlite3 ./data/user_management.db "SELECT COUNT(*) FROM users;"
|
|
|
|
# 查看当前连接数
|
|
lsof ./data/user_management.db | wc -l
|
|
```
|
|
|
|
### 2. 常见解决方案
|
|
|
|
```bash
|
|
# 重启服务清理缓存
|
|
docker compose restart
|
|
|
|
# 如果是数据库锁等待,等待或重启
|
|
docker compose restart
|
|
|
|
# 检查是否有慢查询
|
|
# 参考 04-log-analysis.md 的查询分析
|
|
```
|
|
|
|
### 3. 监控恢复
|
|
|
|
```bash
|
|
# 持续监控
|
|
watch -n 5 'curl -s http://localhost:8080/api/v1/health'
|
|
|
|
# 检查响应时间
|
|
time curl -s http://localhost:8080/api/v1/health
|
|
```
|
|
|
|
## SEV4 响应(轻微问题)
|
|
|
|
### 1. 记录问题
|
|
|
|
```bash
|
|
# 创建问题记录
|
|
cat > issue_$(date +%Y%m%d).md << EOF
|
|
# 问题记录
|
|
|
|
日期:[填写]
|
|
问题描述:[详细描述]
|
|
影响:[影响范围]
|
|
日志:[相关日志片段]
|
|
EOF
|
|
```
|
|
|
|
### 2. 安排修复
|
|
|
|
```bash
|
|
# 在下一个维护窗口修复
|
|
# 或安排开发团队跟进
|
|
```
|
|
|
|
## 回滚步骤
|
|
|
|
如果当前修复导致新问题:
|
|
|
|
```bash
|
|
# 停止服务
|
|
docker compose stop
|
|
|
|
# 恢复到上一个稳定版本
|
|
git checkout <previous-version>
|
|
docker compose up -d
|
|
|
|
# 或从备份恢复数据
|
|
./scripts/backup/backup.sh --restore
|
|
```
|
|
|
|
## 事件恢复清单
|
|
|
|
- [ ] 服务恢复正常
|
|
- [ ] 健康检查通过
|
|
- [ ] 主要功能验证正常
|
|
- [ ] 性能指标正常
|
|
- [ ] 无新增错误
|
|
- [ ] 通知相关人员恢复完成
|
|
|
|
## 联系人
|
|
|
|
- 运维负责人:[填写]
|
|
- 开发团队:[填写]
|
|
- 基础设施团队:[填写]
|
|
- 项目经理:[填写]
|
|
|
|
## 事后处理
|
|
|
|
### 1. 事件记录
|
|
|
|
创建详细的事件报告,包括:
|
|
- 事件时间线
|
|
- 根本原因
|
|
- 影响评估
|
|
- 修复步骤
|
|
- 经验教训
|
|
|
|
### 2. 预防措施
|
|
|
|
根据事件分析:
|
|
- 增强监控告警
|
|
- 优化自动化恢复流程
|
|
- 更新 Runbook
|
|
- 加强容量规划
|
|
|
|
### 3. 复盘会议
|
|
|
|
- 讨论事件过程
|
|
- 识别改进点
|
|
- 分配行动项
|
|
- 更新应急流程
|