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

14 KiB
Raw Blame 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

响应示例:

{
  "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 - 重启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)

  • 企微机器人通知模块
  • 分级通知(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)