14 KiB
14 KiB
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
响应示例:
{
"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 规则匹配逻辑
# 伪代码
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 修复脚本示例
# 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)
# 通过 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 地址: 通过管理后台配置(已有集成能力)
消息模板:
{
"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)
- 实现
/api/admin/health-check接口 - 集成 nginx/backend/redis/postgres 检查
产出:
backend/app/services/health_check_service.py- 健康检查服务backend/app/api/admin_api.py- 健康检查端点
阶段二:业务监控 ✅ (2026-07-09)
- 坐席列表API监控
- 消息发送监控
- AI/RAG服务监控
- WebSocket连接监控
阶段三:自愈能力 ✅ (2026-07-09)
- 规则引擎实现(8条规则)
- 修复脚本库
- 自动执行 + 记录
产出:
deploy-scripts/fixes/- 修复脚本目录restart_backend.sh- 重启后端restart_redis.sh- 重启Redisrestart_nginx.sh- 重启Nginxrestart_ragflow.sh- 重启RAGFlowclear_logs.sh- 清理日志
deploy-scripts/health-check/check_all.sh- 巡检脚本deploy-scripts/rules/auto_healer.py- 规则引擎
阶段四:通知集成 ✅ (2026-07-09)
- 企微机器人通知模块
- 分级通知(P0电话/P1机器人/P2记录)
- 告警模板
产出:
deploy-scripts/notify/wecom_notifier.py- 企微通知模块
阶段五:定时任务 ✅ (2026-07-09)
- 定时巡检任务(每5分钟)
- 每日报告(早上9点)
- 日志清理(凌晨3点)
- 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 相关文档
9.2 参考资源
- jumpserver-ops 工具:
C:\Users\simon\.workbuddy\skills\jumpserver-ops - 故障排查手册 CASE 库
维护记录
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.0 | 2026-07-09 | 初始版本 + 阶段1-5全部实施完成 + 生产部署完成 (10.90.5.110) |