Skip to content

监控与连接 ​

概述 ​

监控与连接模块提供系统运行时态的可观测能力与实时通信能力,覆盖服务器资源、缓存、在线会话、实时通道以及健康检查五大类。

服务器监控 ​

image-20260930154729503

服务器监控用于实时展示应用所在主机的资源使用情况,基于 psutil 采集,不做长期存储,每次请求即时采样。

后端入口 GET /infra/server/get-info,权限标识 infra:server:query。采集内容包含五类维度:

  • CPU 信息:核心数、用户使用率、系统使用率、空闲率(采用 0.5 秒采样窗口获得实时值)。
  • 内存信息:总量、已用、剩余、使用率。
  • 系统信息:服务器 IP、主机名、操作系统、系统架构、项目路径。
  • Python 运行信息:进程版本、启动时间、运行时长、安装路径及进程级内存占用。
  • 磁盘信息:各挂载分区的文件系统类型、总量、已用、剩余、使用率。

各采集任务通过 asyncio.gather 并发执行,避免相互阻塞。CPU 使用率由于 cpu_percent 需要两次采样间隔,固定采样 0.5 秒。

前端页面位于「基础设施 → 服务器监控」(apps/web-ele/src/views/infra/server),通过 getServerMonitorInfo() 拉取数据,并以卡片形式分别展示 CPU、内存、磁盘、系统、Python 五块信息;磁盘使用率按阈值(≥90% 红、≥70% 橙、其余绿)着色进度条。

Redis 监控 ​

image-20260930154759803

Redis 监控读取实例的运行指标,帮助运维人员判断缓存健康度与热点命令。

后端入口 GET /infra/redis/get-monitor-info,权限标识 infra:redis:get-monitor-info。返回内容包含:

  • info:原始 INFO 命令返回的服务器信息字典(键名已统一转为小驼峰)。
  • dbSize:当前逻辑库(由配置 REDIS_DB_NAME 指定)的 Key 数量。
  • totalKeys:整个 Redis 实例所有逻辑库的 Key 总数(遍历 info 中 db* 键累加)。
  • commandStats:命令统计列表,含命令名、调用次数、总耗时(微秒)。

数据通过 RedisCURD 封装的 info()、db_size()、commandstats() 获取,命令统计由 cmdstat_* 字段解析而来。

前端页面位于「基础设施 → Redis 缓存」(apps/web-ele/src/views/infra/redis),通过 getRedisMonitorInfo() 加载,分「Redis 概览」「内存使用」「命令统计」三块卡片展示。

在线用户 ​

在线用户模块从 Redis 中扫描当前所有有效会话,实现在线状态查看与强制下线管理,是会话安全治理的重要手段。

image-20260930154820364

会话存储结构 ​

用户登录后,后端在 Redis 中写入三类键(均以会话编号 session_id 为后缀):

  • ACCESS_TOKEN:{session_id}:访问令牌。
  • REFRESH_TOKEN:{session_id}:刷新令牌。
  • USER_SESSION:{session_id}:完整会话信息(昵称、账号、IP、登录地点、操作系统、浏览器、登录时间、终端类型等)。

接口能力 ​

能力方法 / 路径权限标识
在线用户分页列表GET /infra/online/pageinfra:online:query
强制下线(单个)DELETE /infra/online/delete?sessionId=infra:online:delete
批量强制下线DELETE /infra/online/delete-listinfra:online:delete
清除所有在线用户DELETE /infra/online/delete-allinfra:online:delete

列表查询会扫描 ACCESS_TOKEN:* 下的全部令牌,解码 JWT 得到 session_id 后读取 USER_SESSION,并支持按昵称、账号、IP、登录地点、会话编号及登录时间范围做内存过滤与排序。该接口为低频运维查询,请勿高频轮询。

强制下线会同时删除该会话的三类 Redis 键,使令牌立即失效;delete-all 为高危操作,将强制全部用户下线。

前端页面位于「基础设施 → 在线用户」(apps/web-ele/src/views/infra/online),基于 VxeTable 渲染列表,提供搜索表单、单条强制下线、批量强制下线与清空全部操作,操作按钮均受 infra:online:delete 权限控制。

WebSocket 连接 ​

WebSocket 提供全双工实时通道,用于服务端主动向客户端推送消息(如通知、聊天、业务事件)。该路由受全局开关 WEBSOCKET_ENABLE 控制,未启用时不挂载。

image-20260930154857232

连接与鉴权 ​

前端连接地址为 /infra/ws?token={accessToken},握手阶段由 get_current_user_ws 依赖完成鉴权,连接建立后即可收发消息。鉴权使用的 token 即登录后获得的 accessToken,与系统会话体系保持一致。

消息帧协议 ​

所有业务消息均为 JSON 文本,外层为统一信封:

json
{
  "type": "业务消息类型",
  "content": "业务消息体(JSON 字符串)"
}

心跳采用 ping / pong 字节帧:客户端发送 ping,服务端回复 pong。

消息分发 ​

连接由 handle_websocket 主流程托管:登记连接到连接管理器、可选订阅 Redis 广播通道、循环接收消息并分发。框架维护一个 type → 监听器 注册表,业务模块继承 WebSocketMessageListener 并在模块导入时调用 register_listener 即可处理特定类型消息。

当前内置 DemoWebSocketMessageListener,监听 demo-message-send:

  • 指定 toUserId → 向该用户单发 demo-message-receive;
  • 不指定 → 向全部在线用户群发。

跨实例场景:每个连接可选订阅 Redis 广播通道 REDIS_CHANNEL,将其他节点的消息转发到本地连接,实现多副本集群下的消息可达。

前端示例页位于「基础设施 → WebSocket」(apps/web-ele/src/views/infra/webSocket),使用 @vueuse/core 的 useWebSocket 建立连接(开启自动重连与心跳),提供连接状态展示、消息发送(可选择接收人)、消息记录列表,并会解析 demo-message-receive 与 notice-push 两类推送消息。

健康检查 ​

健康检查为部署与编排系统(如 K8s、负载均衡器)提供存活与就绪探针,位于 /health 命名空间下。

端点用途未就绪表现
GET /health基础健康检查,仅判断进程存活始终 200
GET /health/live存活探针,进程已启动即可始终 200
GET /health/ready就绪探针,探测数据库与 Redis返回 503

就绪检查并发探测数据库(SELECT 1)与 Redis(PING),并附带延迟(毫秒);任一启用中的依赖异常即返回 503,未启用的依赖视为就绪。响应同时包含版本号、启动时间戳、运行时长与磁盘使用率。

前端页面入口 ​

功能路由 / 页面API 封装
服务器监控infra/serverapi/infra/server
Redis 监控infra/redisapi/infra/redis
在线用户infra/onlineapi/infra/online
WebSocketinfra/webSocket直接基于 useWebSocket 连接

各页面路径均为 apps/web-ele/src/views/infra/*,与后端 /infra/* 路由一一对应。