# sanguo_vnpy 阿里云生产环境应急响应方案

**版本**: v1.0  
**作者**: 姜维（后勤总督）  
**日期**: 2026-03-21

---

## 🚨 应急响应原则

### 1. 快速响应原则
- **5分钟内**：发现问题并启动响应流程
- **15分钟内**：完成初步诊断和影响评估
- **30分钟内**：确定并执行恢复方案

### 2. 优先级原则
- **P0（严重）**：系统完全不可用，数据丢失风险
- **P1（高）**：核心功能异常，影响主要交易
- **P2（中）**：次要功能异常，不影响核心交易
- **P3（低）**：轻微问题，用户体验影响

### 3. 数据安全原则
- **先备份，后操作**：任何修复操作前先备份数据
- **日志优先**：优先保存和分析日志，避免二次故障
- **最小化变更**：使用最小必要的操作修复问题

---

## 🔍 问题诊断流程

### 1. 监控告警触发

#### 告警来源
1. **系统监控**：Prometheus + Grafana
2. **应用监控**：sanguo_vnpy 内部健康检查
3. **业务监控**：策略执行异常告警
4. **用户反馈**：用户上报的问题

#### 告警级别对应
| 告警类型 | 影响 | 响应级别 |
|---------|------|---------|
| 实例宕机 | 系统不可用 | P0 |
| CPU > 90% 5分钟 | 性能下降 | P1 |
| 内存 > 90% 5分钟 | 可能OOM | P1 |
| 磁盘 > 95% | 数据写入失败 | P0 |
| vn.py 进程消失 | 应用不可用 | P0 |
| 策略执行失败 | 业务影响 | P1 |

### 2. 快速诊断步骤

#### 步骤 1: 检查系统状态
```bash
# 1. 检查服务器是否在线
ping <server-ip>

# 2. SSH 登录（如果可能）
ssh root@<server-ip>

# 3. 检查系统资源
top
htop
df -h
free -m

# 4. 检查网络
ping 8.8.8.8
curl -I https://www.aliyun.com
```

#### 步骤 2: 检查服务状态
```bash
# 1. 检查 vn.py 进程
ps aux | grep -i vnpy
ps aux | grep -i python

# 2. 检查端口监听
netstat -tlnp | grep 8080
ss -tlnp | grep 8080

# 3. 检查监控服务
systemctl status prometheus
systemctl status node_exporter
systemctl status grafana-server
```

#### 步骤 3: 检查日志
```bash
# 1. 系统日志
tail -100 /var/log/syslog
tail -100 /var/log/messages

# 2. 应用日志
tail -100 /path/to/sanguo_vnpy/logs/app.log
tail -100 /path/to/sanguo_vnpy/logs/error.log

# 3. 云服务商日志
# 阿里云控制台查看云服务器监控和事件
```

---

## 🔧 常见问题应急处理

### 场景 1: 实例完全宕机（P0）

#### 现象
- Ping 无响应
- SSH 无法连接
- 监控显示实例离线

#### 应急处理
1. **立即备份**（如果还能访问）
   ```bash
   # 尝试通过阿里云控制台创建快照
   # 快照命名: sanguo-vnpy-$(date +%Y%m%d-%H%M)-emergency
   ```

2. **重启实例**
   - 阿里云控制台 → 实例 → 重启
   - 等待 2-5 分钟

3. **如果重启失败**
   - 使用可用快照回滚
   - 或从备份数据重建实例

4. **验证恢复**
   ```bash
   # 检查服务是否恢复
   ssh root@<server-ip>
   ps aux | grep vnpy
   curl http://localhost:8080/health
   ```

---

### 场景 2: vn.py 进程崩溃（P0）

#### 现象
- 实例在线，但 vn.py 进程消失
- 端口 8080 无响应
- 应用监控告警

#### 应急处理
1. **保存崩溃现场**
   ```bash
   # 保存系统状态
   dmesg > /tmp/dmesg-$(date +%Y%m%d-%H%M).log
   vmstat 1 5 > /tmp/vmstat-$(date +%Y%m%d-%H%M).log
   
   # 保存应用日志
   cp -r /path/to/sanguo_vnpy/logs /tmp/logs-backup-$(date +%Y%m%d-%H%M)
   ```

2. **检查崩溃原因**
   ```bash
   # 检查系统日志中的 OOM
   grep -i "out of memory" /var/log/syslog
   grep -i "killed process" /var/log/syslog
   
   # 检查应用错误日志
   tail -200 /path/to/sanguo_vnpy/logs/error.log
   ```

3. **快速重启服务**
   ```bash
   # 进入项目目录
   cd /path/to/sanguo_vnpy
   
   # 激活虚拟环境
   source venv/bin/activate
   
   # 启动 vn.py
   python -m vnpy &
   
   # 或者使用服务管理
   systemctl start sanguo-vnpy
   ```

4. **验证恢复**
   ```bash
   # 检查进程
   ps aux | grep vnpy
   
   # 检查端口
   curl http://localhost:8080/health
   
   # 检查监控
   # 确认 Prometheus 数据恢复
   ```

---

### 场景 3: 磁盘空间满（P0）

#### 现象
- 磁盘使用率 > 95%
- 数据写入失败
- 应用无法保存数据

#### 应急处理
1. **立即清理临时文件**
   ```bash
   # 清理系统临时文件
   rm -rf /tmp/*
   
   # 清理应用缓存
   rm -rf /path/to/sanguo_vnpy/cache/*
   
   # 清理旧日志（保留最近7天）
   find /path/to/sanguo_vnpy/logs -name "*.log" -mtime +7 -delete
   ```

2. **检查大文件**
   ```bash
   # 查找大于 100MB 的文件
   find / -type f -size +100M -exec ls -lh {} \;
   
   # 检查数据目录
   du -sh /path/to/sanguo_vnpy/data
   du -sh /path/to/sanguo_vnpy/results
   ```

3. **扩容磁盘（如果需要）**
   - 阿里云控制台 → 云盘 → 扩容
   - 或挂载新的数据盘

4. **验证恢复**
   ```bash
   df -h
   # 确认使用率下降到安全范围（< 80%）
   ```

---

### 场景 4: 数据库连接失败（P1）

#### 现象
- 应用报错无法连接数据库
- 策略无法获取数据
- 回测无法执行

#### 应急处理
1. **检查数据库状态**
   ```bash
   # 如果使用 RDS
   # 阿里云控制台检查 RDS 状态
   
   # 如果使用本地 SQLite
   ls -lh /path/to/sanguo_vnpy/data/*.db
   # 检查文件权限和完整性
   ```

2. **网络连接测试**
   ```bash
   # 测试数据库连接
   telnet <db-host> <db-port>
   nc -zv <db-host> <db-port>
   
   # 检查安全组
   # 确认应用服务器 IP 在数据库白名单中
   ```

3. **快速恢复方案**
   ```bash
   # 方案 A: 切换到本地缓存数据
   # 修改配置使用 akshare 直接获取
   
   # 方案 B: 从备份恢复数据库
   # 恢复最近的数据库备份
   
   # 方案 C: 重启数据库服务
   # 如果是自建数据库，重启服务
   ```

---

## 📋 应急响应检查清单

### 响应前检查
- [ ] 确认告警级别和影响范围
- [ ] 通知相关人员（诸葛亮/主公）
- [ ] 保存当前系统状态和日志
- [ ] 准备回滚方案

### 响应中检查
- [ ] 执行诊断步骤，确定根因
- [ ] 执行最小必要的修复操作
- [ ] 持续监控系统状态
- [ ] 记录所有操作和时间点

### 响应后检查
- [ ] 验证核心功能恢复正常
- [ ] 验证监控数据正常
- [ ] 验证业务数据完整性
- [ ] 总结故障原因和改进措施

---

## 📞 联络清单

### 紧急联络
- **总军师（诸葛亮）**：负责决策和协调
- **主公**：最终决策和资源协调
- **赵云**：数据库和数据相关问题
- **关羽**：回测引擎和风控问题
- **张飞**：API 兼容层问题
- **司马懿**：安全和合规问题

### 阿里云支持
- **阿里云控制台**：https://home.console.aliyun.com
- **阿里云工单**：紧急问题提交工单
- **阿里云电话**：400-910-0100

---

## 🔄 事后复盘

### 复盘会议
- **时间**：故障恢复后 24 小时内
- **参与人**：所有相关人员
- **内容**：
  1. 故障回顾和时间线
  2. 根因分析
  3. 响应流程评估
  4. 改进措施讨论

### 改进措施
- 技术改进：防止同类故障再次发生
- 流程改进：优化响应流程
- 监控改进：完善告警和监控
- 文档改进：更新应急方案

---

**本应急方案会持续更新，确保生产环境安全稳定运行！** 🚛
