# 性能监控与指标

<cite>
**本文引用的文件**
- [README.md](file://README.md)
- [composer.json](file://composer.json)
- [.example.env](file://.example.env)
- [public/index.php](file://public/index.php)
- [public/router.php](file://public/router.php)
- [public/api.php](file://public/api.php)
- [public/themes/admin_default/user/admin_user_action/edit.html](file://public/themes/admin_default/user/admin_user_action/edit.html)
- [public/static/js/validate.js](file://public/static/js/validate.js)
- [public/static/js/ueditor/third-party/highcharts/highcharts-more.src.js](file://public/static/js/ueditor/third-party/highcharts/highcharts-more.src.js)
- [public/static/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js](file://public/static/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js)
</cite>

## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考量](#性能考量)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)

## 简介
本指南面向 ThinkCMF 项目，围绕数据库性能监控与指标分析，构建一套可落地的监控体系。内容涵盖关键性能指标定义与采集、查询统计分析（慢查询日志、查询频率、响应时间）、连接状态监控（连接数、使用率、异常检测）、资源使用监控（CPU、内存、磁盘 I/O、网络带宽），以及性能告警与自动化工具的配置思路，并给出数据分析与趋势预测的实践建议。

## 项目结构
ThinkCMF 采用多应用架构与插件机制，前端通过 public 目录对外提供入口，后端基于 ThinkPHP 运行时。数据库连接与 ORM 由框架层负责，业务层通过应用与 API 层调用数据库。监控体系应从入口层（HTTP 请求）开始采集，贯穿到数据库层，形成闭环。

```mermaid
graph TB
client["客户端浏览器/移动设备"] --> public_index["public/index.php<br/>入口脚本"]
public_index --> router["public/router.php<br/>路由分发"]
router --> api_entry["public/api.php<br/>API入口"]
api_entry --> app["应用层(app)"]
app --> db["数据库连接/ORM"]
db --> metrics["监控指标采集"]
metrics --> alert["告警与通知"]
```

图表来源
- [public/index.php](file://public/index.php)
- [public/router.php](file://public/router.php)
- [public/api.php](file://public/api.php)

章节来源
- [README.md:96-101](file://README.md#L96-L101)
- [composer.json:46-56](file://composer.json#L46-L56)

## 核心组件
- 入口与路由：public/index.php、public/router.php、public/api.php 提供请求入口与路由分发，是监控埋点与指标采集的关键位置。
- 应用与 API：应用层与 API 层负责业务逻辑与数据访问，数据库连接在此处被频繁调用，是性能监控的重点对象。
- 配置与环境：.example.env 提供数据库与调试相关示例配置项，便于开启调试与慢查询日志等监控能力。
- 前端可视化：项目内置图表库与表单校验等前端资源，可用于展示监控结果与交互式筛选。

章节来源
- [public/index.php](file://public/index.php)
- [public/router.php](file://public/router.php)
- [public/api.php](file://public/api.php)
- [.example.env:1-1](file://.example.env#L1-L1)

## 架构总览
数据库性能监控体系建议采用“入口采集—中间层聚合—存储—可视化—告警”的链路，结合 ThinkCMF 的多应用与插件架构，可在应用层或 API 层注入监控埋点，采集 SQL 执行耗时、连接池状态、资源使用等指标，并通过可视化组件进行展示与告警。

```mermaid
graph TB
subgraph "入口层"
PI["public/index.php"]
PR["public/router.php"]
PA["public/api.php"]
end
subgraph "业务层"
APP["应用(app)"]
API["API(api)"]
end
subgraph "数据层"
ORM["ORM/数据库连接"]
DBMS["MySQL 实例"]
end
subgraph "监控层"
COL["指标采集"]
STORE["指标存储"]
VIS["可视化展示"]
AL["告警引擎"]
end
PI --> PR --> PA --> APP --> ORM --> DBMS
APP --> COL
API --> COL
COL --> STORE --> VIS --> AL
```

图表来源
- [public/index.php](file://public/index.php)
- [public/router.php](file://public/router.php)
- [public/api.php](file://public/api.php)

## 详细组件分析

### 入口与路由层监控
- 监控目标：请求到达时间、路由命中、中间件耗时、异常率。
- 建议埋点：在 public/index.php 与 public/router.php 中记录请求进入与路由分发耗时；在 public/api.php 记录 API 入口耗时。
- 指标定义：
  - QPS：单位时间内请求数
  - P95/P99 响应时间：按路由或 API 分组统计
  - 错误率：HTTP 5xx/业务异常占比
- 可视化：前端图表组件可直接复用项目内置的高图组件进行展示。

章节来源
- [public/index.php](file://public/index.php)
- [public/router.php](file://public/router.php)
- [public/api.php](file://public/api.php)
- [public/static/js/ueditor/third-party/highcharts/highcharts-more.src.js:905-947](file://public/static/js/ueditor/third-party/highcharts/highcharts-more.src.js#L905-L947)

### 查询统计分析
- 慢查询日志：通过数据库慢查询日志定位执行时间长、扫描行数多的 SQL，结合业务场景进行索引优化与 SQL 改写。
- 查询频率统计：按 SQL 模板或路由维度统计调用频次，识别热点接口与高频 SQL。
- 响应时间监控：采集 SQL 执行时间（含网络往返），区分连接、解析、执行、返回阶段耗时。
- 建议实现路径：在应用层或 API 层封装数据库访问层，在 SQL 执行前后打点，记录 SQL 模板、参数摘要、耗时、受影响行数等。

```mermaid
sequenceDiagram
participant C as "客户端"
participant R as "router.php"
participant A as "api.php"
participant S as "业务服务(app)"
participant O as "ORM/数据库"
participant M as "监控采集"
C->>R : "HTTP 请求"
R->>A : "路由分发"
A->>S : "调用业务服务"
S->>O : "执行SQL"
O-->>S : "返回结果"
S-->>A : "组装响应"
A-->>C : "HTTP 响应"
S->>M : "上报SQL耗时/参数摘要"
```

图表来源
- [public/router.php](file://public/router.php)
- [public/api.php](file://public/api.php)

### 数据库连接状态监控
- 连接数统计：活跃连接数、排队等待连接数、最大连接数上限。
- 连接使用率分析：连接池命中率、空闲连接比例、连接复用率。
- 连接异常检测：连接超时、连接泄漏、连接风暴（短时间内大量新建连接）。
- 建议实现路径：在数据库访问层埋点，记录连接获取/释放、等待时间、失败次数；结合数据库状态视图（如 SHOW PROCESSLIST、SHOW STATUS）进行交叉验证。

```mermaid
flowchart TD
Start(["连接访问开始"]) --> GetConn["获取连接"]
GetConn --> WaitQ{"是否需要排队等待?"}
WaitQ --> |是| RecordWait["记录等待耗时"]
WaitQ --> |否| ExecSQL["执行SQL"]
RecordWait --> ExecSQL
ExecSQL --> CloseConn["释放连接"]
CloseConn --> End(["结束"])
```

图表来源
- [public/api.php](file://public/api.php)

### 资源使用情况监控
- CPU 使用率：进程 CPU 占用、系统平均负载。
- 内存占用：RSS、堆栈、缓存命中率。
- 磁盘 I/O：读写吞吐、IOPS、队列长度、等待时间。
- 网络带宽：请求/响应字节数、并发连接数。
- 建议实现路径：结合系统监控工具（如操作系统自带监控、APM 工具）与业务侧指标（SQL 耗时、连接等待）综合分析，定位瓶颈。

### 性能告警与自动化工具
- 告警阈值：QPS、P95/P99、错误率、慢查询占比、连接等待时间、资源使用率等。
- 告警渠道：邮件、IM、Webhook。
- 自动化工具：Prometheus + Grafana、APM（如 New Relic、SkyWalking）、日志分析平台（如 ELK）。
- 在 ThinkCMF 中的落地：在应用层或 API 层输出结构化指标，接入 Prometheus 抓取；或通过 Webhook 将告警推送到现有运维平台。

### 性能数据分析与趋势预测
- 数据分析：按天/小时/分钟聚合指标，计算同比/环比，识别异常波动。
- 趋势预测：基于历史序列采用时间序列模型（如 ARIMA、Prophet）预测未来趋势，提前扩容或优化。
- 可视化：利用项目内置图表组件进行趋势图、热力图、漏斗图等展示。

章节来源
- [public/static/js/ueditor/third-party/highcharts/highcharts-more.src.js:905-947](file://public/static/js/ueditor/third-party/highcharts/highcharts-more.src.js#L905-L947)

## 依赖关系分析
- 入口与路由：public/index.php → public/router.php → public/api.php，形成请求链路。
- 应用与配置：应用层依赖 ThinkPHP 运行时与 Composer 自动加载；数据库配置来自 .env 示例文件。
- 监控集成：监控采集点应尽量靠近业务层，减少对核心业务的影响。

```mermaid
graph LR
composer["composer.json<br/>自动加载/依赖"] --> autoload["PSR-4 自动加载"]
autoload --> app["应用(app)"]
autoload --> api["API(api)"]
autoload --> plugins["插件(public/plugins)"]
env[".example.env<br/>数据库/调试配置"] --> app
env --> api
```

图表来源
- [composer.json:46-56](file://composer.json#L46-L56)
- [.example.env:1-1](file://.example.env#L1-L1)

章节来源
- [composer.json:46-56](file://composer.json#L46-L56)
- [.example.env:1-1](file://.example.env#L1-L1)

## 性能考量
- 低侵入性：优先在框架入口与业务层封装监控，避免散落式埋点。
- 指标粒度：以路由/API 为最小聚合单元，同时保留 SQL 模板与参数摘要，便于定位具体语句。
- 成本控制：采样策略与批量上报，降低对生产环境的影响。
- 可观测性：日志、指标、链路追踪三元合一，提升问题定位效率。

## 故障排查指南
- 表单校验与交互：前端表单校验与交互逻辑可作为问题排查的辅助线索，例如输入参数异常导致的 SQL 失败。
- 时间选择器：日期时间选择器组件用于筛选监控时间范围，辅助定位时段性问题。
- 配置核对：确认数据库连接参数、字符集、调试开关等配置项，避免因配置错误导致的性能偏差。

章节来源
- [public/static/js/validate.js:511-560](file://public/static/js/validate.js#L511-L560)
- [public/static/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js:1510-1562](file://public/static/js/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js#L1510-L1562)
- [.example.env:1-1](file://.example.env#L1-L1)

## 结论
通过在 ThinkCMF 的入口层与业务层建立完善的监控埋点，结合数据库慢查询日志与连接状态监控，能够有效识别性能瓶颈并及时告警。配合资源使用监控与可视化展示，形成闭环的性能治理流程。建议逐步完善指标体系，持续优化查询与连接策略，确保系统在高并发场景下的稳定性与可扩展性。

## 附录
- 快速上手清单
  - 在入口与路由层埋点，采集请求耗时与异常。
  - 在业务层封装数据库访问，采集 SQL 执行耗时与连接等待。
  - 开启数据库慢查询日志，定期分析并优化。
  - 设置告警阈值，接入可视化与通知渠道。
  - 利用图表组件进行趋势展示，支撑容量规划与性能优化。