447 lines
14 KiB
Markdown
447 lines
14 KiB
Markdown
|
|
# 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) |
|