Files
wecom_it_smart_desk/docs/09-部署运维/12-IT服务台业务监控与自愈方案.md
T

447 lines
14 KiB
Markdown
Raw Normal View History

# IT服务台业务监控与自愈方案
> **版本**: v1.0 | **日期**: 2026-07-09 | **维护人**: 宋献
> **定位**: 业务层监控告警 + 自动化修复方案
---
## 1. 方案概述
### 1.1 背景
IT智能服务台上线后,业务异常(如坐席列表获取失败、消息发送失败)直接影响用户体验。当前依赖人工发现和处理,响应慢。
### 1.2 目标
| 目标 | 指标 |
|-----|------|
| 业务问题早发现 | 5分钟内检测到异常 |
| 自愈能力 | 低级别问题自动修复 |
| 减少人工干预 | 70%业务问题自动化处理 |
| 问题可追溯 | 所有异常都有记录 |
### 1.3 分层监控架构
```
┌──────────────────────────────────────────────────────────────┐
│ 基础设施层(数据中心兜底) │
│ - CPU/内存/磁盘/网络/物理服务器 │
│ - 监控告警:基础设施团队处理 │
│ - 本系统:仅展示状态 + 记录 │
└──────────────────────────────────────────────────────────────┘
↓ 告知
┌──────────────────────────────────────────────────────────────┐
│ 业务应用层(本系统自主维护)⭐ │
│ - 坐席管理 / 消息通讯 / AI服务 / 会话管理 │
│ - 检测 → 诊断 → 修复 → 验证 → 记录 │
└──────────────────────────────────────────────────────────────┘
```
---
## 2. 监控接口设计
### 2.1 业务健康检查接口
**接口**: `GET /api/admin/health-check`
**响应示例**:
```json
{
"code": 0,
"data": {
"timestamp": "2026-07-09T16:00:00Z",
"overall_status": "healthy",
"infrastructure": {
"nginx": "healthy",
"backend": "healthy",
"redis": "healthy",
"postgres": "healthy"
},
"business": {
"agents_api": { "status": "healthy", "latency_ms": 45 },
"message_send": { "status": "healthy", "latency_ms": 120 },
"wecom_callback": { "status": "healthy", "latency_ms": 30 },
"ai_rag": { "status": "healthy", "latency_ms": 850 },
"websocket": { "status": "healthy", "connections": 12 }
},
"errors": []
}
}
```
### 2.2 监控点清单
| 监控点 | 检测方式 | 超时阈值 | 影响级别 |
|-------|---------|---------|---------|
| **nginx** | curl localhost:80 | 2s | 高 |
| **backend** | curl /health | 2s | 高 |
| **redis** | redis-cli ping | 1s | 高 |
| **postgres** | pg_isready | 2s | 高 |
| **agents_api** | GET /api/agents/ | 5s | 高 |
| **message_send** | POST 发送测试消息 | 10s | 高 |
| **wecom_callback** | 企微API ping | 5s | 中 |
| **ai_rag** | POST /api/ai/query | 15s | 中 |
| **websocket** | WS连接数监控 | — | 中 |
### 2.3 基础设施监控(轻量)
| 监控项 | 命令 | 告警阈值 |
|-------|------|---------|
| 容器健康 | `docker inspect --format='{{.State.Health.Status}}'` | unhealthy |
| 磁盘使用率 | `docker system df` | > 85% |
| 内存使用 | `docker stats --no-stream` | > 90% |
| 日志大小 | `du -sh /app/logs` | > 1GB |
> **说明**: 基础设施问题仅告警+记录,解决依赖数据中心团队。
---
## 3. 规则引擎设计
### 3.1 影响级别定义
| 级别 | 定义 | 处理方式 |
|-----|------|---------|
| **P0 - 紧急** | 核心业务完全不可用 | 自动修复 + 立即通知 |
| **P1 - 高** | 部分功能受损 | 自动修复 + 通知 |
| **P2 - 中** | 非核心功能异常 | 自动修复 + 记录 |
| **P3 - 低** | 轻微异常,不影响使用 | 记录,择机处理 |
### 3.2 修复规则库
| 规则ID | 触发条件 | 影响级别 | 自动修复 | 通知 |
|--------|---------|---------|---------|------|
| **R001** | agents_api 失败 | P0 | 重启backend容器 | 是 |
| **R002** | message_send 失败 | P0 | 检查企微token/刷新 | 是 |
| **R003** | AI/RAG 超时 | P1 | 重启RAGFlow容器 | 是 |
| **R004** | WebSocket断开 | P1 | 重置连接池 | 是 |
| **R005** | redis 连接超时 | P0 | 重启backend | 是 |
| **R006** | postgres 连接失败 | P0 | 重启backend | 是 |
| **R007** | 磁盘空间不足 | P2 | 清理7天前日志 | 是 |
| **R008** | 容器不健康 | P1 | 重启对应容器 | 是 |
### 3.3 规则匹配逻辑
```python
# 伪代码
def match_rule(check_result):
for rule in rules:
if rule.trigger == check_result.type and rule.condition(check_result):
return rule
return None
def process_rule(rule, check_result):
# 评估影响级别
severity = evaluate_impact(check_result)
if rule.auto_fix and severity in [P2, P3]:
# 自动修复
execute_fix(rule.fix_command)
record_audit("AUTO_FIX", rule.id, "success")
elif severity in [P0, P1]:
# 需要通知
notify_admin(severity, check_result)
record_audit("MANUAL_NEEDED", rule.id, "pending")
```
---
## 4. 修复脚本库
### 4.1 脚本目录结构
```
deploy-scripts/
├── health-check/
│ ├── check_all.sh # 全量检查
│ └── check_business.sh # 业务检查
├── fixes/
│ ├── restart_backend.sh # 重启后端
│ ├── restart_nginx.sh # 重启Nginx
│ ├── restart_redis.sh # 重启Redis
│ ├── clear_logs.sh # 清理日志
│ ├── refresh_wecom_token.sh # 刷新企微Token
│ └── restart_ragflow.sh # 重启RAGFlow
└── notify/
└── notify.sh # 企微通知
```
### 4.2 修复脚本示例
```bash
# restart_backend.sh - 重启后端容器
#!/bin/bash
CONTAINER_NAME="wecom_it_backend"
echo "[$(date)] 重启后端容器: $CONTAINER_NAME"
docker compose restart $CONTAINER_NAME
# 等待健康检查通过
for i in {1..30}; do
STATUS=$(docker inspect --format='{{.State.Health.Status}}' $CONTAINER_NAME 2>/dev/null || echo "unknown")
if [ "$STATUS" = "healthy" ]; then
echo "[$(date)] 容器已就绪"
exit 0
fi
sleep 2
done
echo "[$(date)] 容器健康检查超时"
exit 1
```
### 4.3 调用方式(复用 jumpserver-ops
```python
# 通过 jumpserver-ops 执行远程修复脚本
import subprocess
def execute_fix_script(script_name, server="10.90.5.110"):
"""执行远程修复脚本"""
cmd = [
"python", "jms_ops.py",
"exec", "-c",
f"bash /opt/wecom-it-desk/deploy-scripts/fixes/{script_name}",
"--reuse"
]
result = subprocess.run(cmd, capture_output=True, text=True)
return result.returncode == 0
```
---
## 5. 通知机制
### 5.1 企微机器人通知
**WebHook 地址**: 通过管理后台配置(已有集成能力)
**消息模板**:
```json
{
"msgtype": "markdown",
"markdown": {
"content": "## 🔴 IT服务台告警\n\n" +
"> **级别**: P0-紧急\n" +
"> **问题**: 坐席列表API获取失败\n" +
"> **时间**: 2026-07-09 16:05:00\n" +
"> **自动修复**: 已执行(重启backend容器)\n\n" +
"> **状态**: 修复中...\n\n" +
"> [查看监控面板](https://itsupport.servyou.com.cn/itadmin/)"
}
}
```
### 5.2 通知级别
| 级别 | 通知方式 | 通知对象 |
|-----|---------|---------|
| P0 | 企微机器人 + 电话 | 管理员 + 值班人员 |
| P1 | 企微机器人 | 管理员 |
| P2 | 企微机器人 | 管理员 |
| P3 | 仅记录 | — |
---
## 6. 巡检任务计划
### 6.1 巡检频率
| 任务 | 频率 | 执行方式 |
|-----|------|---------|
| 业务健康检查 | 每5分钟 | 后台定时任务 |
| 基础设施检查 | 每5分钟 | 后台定时任务 |
| 日志清理 | 每天凌晨3点 | Cron |
| 巡检报告 | 每天早上9点 | 定时任务 |
### 6.2 巡检流程
```
┌─────────────────────────────────────────────────────────────┐
│ 定时任务触发(每5分钟) │
└─────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 1. 执行 /api/admin/health-check │
│ 2. 分析最近5分钟错误日志 │
│ 3. 匹配规则库 │
└─────────────────────┬───────────────────────────────────────┘
┌────────────┴────────────┐
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 有异常 │ │ 全部正常 │
└──────┬──────┘ └──────┬──────┘
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 匹配规则 │ │ 更新最后 │
│ → 执行修复 │ │ 正常时间 │
│ → 通知 │ │ → 结束 │
└─────────────┘ └─────────────┘
```
### 6.3 审计记录
所有巡检和修复动作记录到审计日志:
| 字段 | 说明 |
|-----|------|
| id | 记录ID |
| timestamp | 时间 |
| type | AUTO_FIX / MANUAL_NEEDED / NOTIFY |
| rule_id | 匹配的规则ID |
| check_result | 检测结果 |
| fix_result | 修复结果 |
| notified | 是否通知 |
---
## 7. 管理后台集成
### 7.1 监控看板
在管理后台新增"系统健康"模块:
- **实时状态**: 整体健康度指示器(绿/黄/红)
- **各服务状态**: nginx/backend/redis/postgres/AI
- **最近告警**: 最近10条告警记录
- **巡检历史**: 最近7天巡检结果
### 7.2 规则配置
管理后台可配置:
- 启用/禁用某条规则
- 调整阈值
- 开启/关闭自动修复
- 通知人员配置
---
## 8. 实施计划
### 阶段一:基础监控(1-2天)
- [ ] 实现 `/api/admin/health-check` 接口
- [ ] 集成 nginx/backend/redis/postgres 检查
- [ ] 管理后台展示健康状态
### 阶段二:业务监控(1-2天)
- [ ] 坐席列表API监控
- [ ] 消息发送监控
- [ ] AI/RAG服务监控
### 阶段三:自愈能力(2-3天)
- [ ] 规则引擎实现
- [ ] 修复脚本库
- [ ] 自动执行 + 记录
### 阶段四:通知集成(1天)
- [ ] 企微机器人通知
- [ ] 告警模板
- [ ] 通知人员配置
### 阶段五:巡检任务(1天)
- [ ] 定时任务配置
- [ ] 巡检报告
- [ ] 审计日志
---
## 9. 实施记录
### 阶段一:基础监控 ✅ (2026-07-09)
- [x] 实现 `/api/admin/health-check` 接口
- [x] 集成 nginx/backend/redis/postgres 检查
**产出**
- `backend/app/services/health_check_service.py` - 健康检查服务
- `backend/app/api/admin_api.py` - 健康检查端点
### 阶段二:业务监控 ✅ (2026-07-09)
- [x] 坐席列表API监控
- [x] 消息发送监控
- [x] AI/RAG服务监控
- [x] WebSocket连接监控
### 阶段三:自愈能力 ✅ (2026-07-09)
- [x] 规则引擎实现(8条规则)
- [x] 修复脚本库
- [x] 自动执行 + 记录
**产出**
- `deploy-scripts/fixes/` - 修复脚本目录
- `restart_backend.sh` - 重启后端
- `restart_redis.sh` - 重启Redis
- `restart_nginx.sh` - 重启Nginx
- `restart_ragflow.sh` - 重启RAGFlow
- `clear_logs.sh` - 清理日志
- `deploy-scripts/health-check/check_all.sh` - 巡检脚本
- `deploy-scripts/rules/auto_healer.py` - 规则引擎
### 阶段四:通知集成 ✅ (2026-07-09)
- [x] 企微机器人通知模块
- [x] 分级通知(P0电话/P1机器人/P2记录)
- [x] 告警模板
**产出**
- `deploy-scripts/notify/wecom_notifier.py` - 企微通知模块
### 阶段五:定时任务 ✅ (2026-07-09)
- [x] 定时巡检任务(每5分钟)
- [x] 每日报告(早上9点)
- [x] 日志清理(凌晨3点)
- [x] Crontab配置
**产出**
- `deploy-scripts/health-check/scheduled_check.py` - 定时巡检脚本
- `deploy-scripts/health-check/crontab.example` - Crontab配置示例
### 文件清单
| 文件 | 说明 |
|------|------|
| `backend/app/services/health_check_service.py` | 健康检查核心服务 |
| `backend/app/api/admin_api.py` | 健康检查API端点 |
| `deploy-scripts/fixes/*.sh` | 修复脚本集 |
| `deploy-scripts/health-check/check_all.sh` | 巡检脚本 |
| `deploy-scripts/health-check/scheduled_check.py` | 定时巡检脚本 |
| `deploy-scripts/health-check/crontab.example` | Crontab配置 |
| `deploy-scripts/rules/auto_healer.py` | 规则引擎 |
| `deploy-scripts/notify/wecom_notifier.py` | 企微通知模块 |
---
## 10. 附录
### 10.1 相关文档
- [00-标准故障排查手册](./00-标准故障排查手册.md)
- [11-堡垒机运维工具](./11-堡垒机运维工具.md)
- [蓝绿部署指南](./蓝绿部署指南.md)
### 9.2 参考资源
- jumpserver-ops 工具: `C:\Users\simon\.workbuddy\skills\jumpserver-ops`
- 故障排查手册 CASE 库
---
**维护记录**
| 版本 | 日期 | 变更 |
|------|------|------|
| v1.0 | 2026-07-09 | 初始版本 + 阶段1-5全部实施完成 + 生产部署完成 (10.90.5.110) |