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