14 KiB
14 KiB
监控运维
**本文引用的文件** - [application.yaml](file://fms-api/src/main/resources/application.yaml) - [pom.xml](file://fms-api/pom.xml) - [FmsApiApplication.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java) - [GlobalExceptionHandler.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java) - [OrgDatabaseProperties.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseProperties.java) - [http.js](file://fms-vue/src/services/http.js) - [FpsMonitor.vue](file://fms-vue/src/components/FpsMonitor.vue) - [LogRebuild.java](file://.tmp-fkcheck/LogRebuild.java)目录
简介
本文件为 FMS 系统的监控运维文档,覆盖前端性能指标采集、后端接口响应时间监控、数据库查询性能分析、日志收集与管理策略、系统健康检查机制、数据库监控方案以及运维管理工具使用指南(服务启停、配置热更新、故障自愈)和容量规划扩容策略。内容基于仓库中现有实现进行梳理,并给出可落地的运维建议与可视化图示。
项目结构
FMS 由前后端两部分组成:
- 前端 fms-vue:基于 Vue 3 + Vite,提供用户界面与前端性能监控能力(FPS 面板),并通过统一的 HTTP 客户端访问后端 API。
- 后端 fms-api:Spring Boot 应用,暴露 /api 上下文下的 REST 接口;通过 Druid 连接池访问 SQL Server;内置全局异常处理与统一返回结构;支持按组织动态加载数据库配置。
graph TB
A["浏览器"] --> B["前端 fms-vue<br/>HTTP 客户端"]
B --> C["后端 fms-api<br/>Spring MVC"]
C --> D["Druid 连接池"]
D --> E["SQL Server 数据库"]
图表来源
章节来源
核心组件
- 前端性能监控:FPS 面板组件,实时统计当前帧率、平均帧率、最低帧率,并以柱状图展示历史趋势,支持拖拽定位与重置。
- 前端网络层:Axios 封装,统一注入认证头、统一错误处理、超时与网络异常提示、鉴权失败跳转登录。
- 后端全局异常处理:集中捕获业务异常、数据库异常等,记录系统级日志并返回统一错误码与消息。
- 数据库连接池:Druid 连接池参数在配置文件中定义,包含最大活跃数、等待超时、空闲检测等。
- 启动入口:应用启动时初始化雪花 ID 生成器,随后启动 Spring Boot 容器。
章节来源
- FpsMonitor.vue:1-290
- http.js:1-111
- GlobalExceptionHandler.java:1-84
- application.yaml:10-34
- FmsApiApplication.java:1-22
架构总览
下图展示了从前端请求到后端处理、数据库访问及异常处理的完整链路,并标注了监控点。
sequenceDiagram
participant U as "用户"
participant FE as "前端 fms-vue"
participant BE as "后端 fms-api"
participant DB as "SQL Server"
U->>FE : 触发操作
FE->>FE : 采集 FPSrequestAnimationFrame
FE->>BE : 发起 HTTP 请求带 Authorization
BE->>BE : 路由/控制器处理
BE->>DB : 执行 SQL经 Druid 连接池
DB-->>BE : 返回结果或异常
BE-->>FE : 统一 ApiResponse
FE-->>U : 渲染结果/提示错误
Note over FE,BE : 监控点:前端 FPS、请求耗时、后端异常日志、数据库连接池状态
图表来源
详细组件分析
前端性能监控(FPS)
- 采样机制:使用 requestAnimationFrame 高频计数,按固定采样间隔计算 FPS,维护当前值、平均值、最小值与历史柱状图。
- 健壮性:对非法入参做归一化;后台切换时重置采样窗口,避免将暂停时长计入均值;支持拖拽移动与重置统计。
- 集成方式:开发环境按需异步加载,生产环境默认不引入,减少开销。
flowchart TD
Start(["组件挂载"]) --> Init["初始化采样窗口"]
Init --> RAF["进入 requestAnimationFrame 循环"]
RAF --> Count{"达到采样间隔?"}
Count -- 否 --> RAF
Count -- 是 --> Calc["计算 FPS/更新平均/最小/历史"]
Calc --> RAF
RAF --> Visibility{"页面可见性变化?"}
Visibility -- 前台 --> Reset["重置采样窗口"]
Visibility -- 后台 --> Wait["等待恢复前台"]
Reset --> RAF
Wait --> RAF
图表来源
章节来源
前端网络层与错误处理
- 请求拦截:自动注入 Authorization 头(Bearer Token)。
- 响应拦截:统一包装 ApiResponse;对 401/40101 清会话并跳转登录;对超时与网络异常给出友好提示;对 5xx 或不可达场景弹出全局错误消息。
- 超时与重试:默认超时 15s;可在调用处传入自定义配置。
sequenceDiagram
participant FE as "前端 http.js"
participant BE as "后端 fms-api"
FE->>FE : 请求拦截注入 Authorization
FE->>BE : 发送请求
alt 成功
BE-->>FE : 200 + ApiResponse
FE-->>FE : 标记 success/code/message/data
else 鉴权失败(401/40101)
BE-->>FE : 401/40101
FE-->>FE : 清理会话并跳转登录
else 网络/超时
BE-->>FE : 无响应/超时
FE-->>FE : 抛出错误并弹全局提示
end
图表来源
章节来源
后端全局异常处理与日志
- 统一异常分类:认证异常、业务异常、保存对象异常、数据库异常、通用异常。
- 日志记录:系统级异常记录方法、URI、堆栈等信息,便于问题定位。
- 统一返回:所有异常均返回标准 ApiResponse,包含错误码与消息。
classDiagram
class GlobalExceptionHandler {
+handleAuthenticationException()
+handleBusinessException()
+handleSaveObjectException()
+handleDatabaseException()
+handleException()
-logSystemException()
-systemErrorResponse()
}
图表来源
章节来源
数据库连接池与慢查询
- 连接池参数:最大活跃连接数、等待超时、空闲检测、借还校验等均在配置中定义。
- 慢查询分析:建议在 SQL Server 侧开启查询计划与慢查询日志,结合业务表索引优化;可通过临时脚本验证日志表结构与索引。
- 备份恢复:建议定期全量+增量备份,并在测试环境演练恢复流程。
flowchart TD
A["应用启动"] --> B["读取 Druid 配置"]
B --> C["创建连接池实例"]
C --> D{"连接可用?"}
D -- 否 --> E["等待/重试/告警"]
D -- 是 --> F["业务请求获取连接"]
F --> G["执行 SQL"]
G --> H{"是否慢查询?"}
H -- 是 --> I["记录慢查询/分析执行计划"]
H -- 否 --> J["正常返回"]
图表来源
章节来源
系统健康检查
- 现状:仓库未提供显式的健康检查端点。
- 建议:新增 /actuator/health 或自定义 /health 端点,检查应用自身与数据库连通性;供负载均衡与健康探针使用。
- 告警规则:当健康检查失败、接口超时率升高、错误率超过阈值时触发告警。
[本节为概念性说明,不直接分析具体文件]
日志收集与管理策略
- 应用日志:后端通过 SLF4J 记录系统异常与关键路径信息;前端在网络异常与鉴权失败时弹出全局提示。
- 日志级别:建议生产环境 INFO 及以上,调试阶段可临时提高至 DEBUG。
- 日志轮转:建议接入 Logback/Log4j2 的滚动策略(按天/大小),并归档保留一定周期。
- 结构化日志:建议统一 JSON 格式,包含 trace_id、user_id、module_code、duration_ms 等字段,便于检索与分析。
- 日志表:仓库中存在技术日志表结构示例,可用于持久化关键操作与异常信息。
章节来源
运维管理工具使用指南
- 服务启停:使用 Maven 插件打包后通过 java -jar 启动;开发环境可使用 spring-boot-devtools 提升迭代效率。
- 配置热更新:当前未启用配置中心;如需热更新,可考虑引入 Spring Cloud Config/Nacos 或基于 Actuator refresh。
- 故障自愈:建议结合健康检查与编排平台(如 Kubernetes Liveness/Readiness)实现自动重启与流量摘除。
章节来源
依赖关系分析
- 前端依赖:Vue 3、Vite、Pinia、Axios、NProgress 等。
- 后端依赖:Spring Boot WebMVC、JDBC、Druid、JWT、Jackson、SQL Server JDBC 驱动等。
- 模块耦合:前端通过 HTTP 与后端交互;后端通过连接池访问数据库;异常处理贯穿全链路。
graph LR
FE["fms-vue"] --> |HTTP| BE["fms-api"]
BE --> |JDBC| DB["SQL Server"]
BE --> |Druid| Pool["连接池"]
图表来源
章节来源
性能与容量规划
- 前端性能:
- 指标:FPS、首屏时间、资源加载耗时、接口响应时间。
- 手段:FPS 面板、网络层埋点(请求开始/结束时间)、静态资源缓存与压缩。
- 后端性能:
- 指标:接口 P95/P99 耗时、错误率、线程池/连接池利用率。
- 手段:接口耗时统计、慢查询分析、连接池参数调优。
- 数据库性能:
- 指标:连接池使用率、慢查询数量、锁等待、IO/CPU 使用。
- 手段:索引优化、执行计划分析、分库分表/读写分离(视规模)。
- 容量规划:
- 基线:压测得出单实例 QPS/TPS、CPU/内存/IO 水位。
- 扩容:水平扩展实例数,配合负载均衡与健康检查;数据库垂直升级或横向扩展。
- 弹性:根据 CPU/连接池使用率设置自动扩缩容策略。
[本节为通用指导,不直接分析具体文件]
故障排查指南
- 前端网络异常:
- 现象:请求超时、网络异常、鉴权失败。
- 处理:检查代理与跨域、确认 Token 有效性、查看全局错误提示。
- 后端异常:
- 现象:系统异常、保存失败、数据库异常。
- 处理:查看全局异常日志、定位 URI 与方法、检查数据库连接与 SQL。
- 数据库问题:
- 现象:连接池耗尽、慢查询增多。
- 处理:调整连接池参数、分析慢查询、优化索引与 SQL。
章节来源
结论
FMS 已具备前端 FPS 监控、统一网络层与后端全局异常处理的基础能力。建议在此基础上完善健康检查端点、结构化日志与慢查询分析,并结合连接池与数据库侧优化,形成完整的监控与运维体系。通过容量规划与弹性扩容策略,保障系统在高峰期的稳定性与可扩展性。
附录
- 关键配置位置:
- 后端端口与上下文:application.yaml
- 数据库连接池参数:application.yaml
- 前端基础 URL 与超时:http.js
- 前端 FPS 面板:FpsMonitor.vue
- 后端异常处理:GlobalExceptionHandler.java
- 启动入口与 ID 生成器:FmsApiApplication.java
章节来源