文档目录
系统监控

简介

本指南面向DouPHP系统的运维与开发人员,提供一套可落地的“系统监控配置”方案。内容覆盖:

  • 数据库连接状态监控:连接池使用、慢查询检测、连接超时监控
  • 磁盘空间监控:存储目录使用量、日志文件大小、临时文件清理策略
  • 内存使用监控:PHP进程内存占用、缓存命中率、会话数据存储监控
  • 服务器资源监控:CPU负载、内存使用、网络I/O等系统级指标
  • 监控数据采集与存储方案,以及历史数据查询与分析方法

说明:DouPHP本身未内置统一的监控系统,但提供了数据库连接管理、缓存适配器、文件存储与上传处理、后台健康模块入口等能力。本文基于这些既有能力,给出最小侵入的监控接入方式与配置建议。

项目结构

与监控相关的关键位置:

  • 配置层:数据库与系统常量、文件系统与上传限制
  • 数据访问层:数据库连接管理与缓存适配器接口
  • 文件与附件:分块上传处理器、附件元数据仓储
  • 后台入口:健康模块控制器(可作为监控探针或健康检查的统一入口)
graph TB
A["配置中心<br/>config/config.php"] --> B["数据库连接管理<br/>DbConnectionManager"]
A --> C["文件系统配置<br/>config/file.php"]
C --> D["附件上传处理<br/>ChunkedUploadHandler"]
D --> E["附件元数据仓储<br/>AttachmentRepository"]
F["缓存适配器接口<br/>CacheAdapter"] --> G["缓存实现(示例: Memcache/EAccelerator)"]
H["后台健康入口<br/>HealthController"] --> I["业务服务/模型(扩展点)"]

核心组件

  • 数据库连接管理:提供连接获取、缓存与过期控制,适合用于连接池使用率统计与连接失败告警。
  • 缓存适配器:统一add/get/update/del接口,便于统计命中率与异常率。
  • 文件与附件:记录上传大小、路径、时间戳,便于统计存储增长与清理策略。
  • 后台健康入口:可作为健康检查探针或监控数据的聚合展示入口。

架构总览

下图展示了监控采集在DouPHP中的关键接入点与数据流向:

sequenceDiagram
participant App as "应用请求"
participant DBM as "数据库连接管理"
participant Cache as "缓存适配器"
participant FS as "文件/附件处理"
participant Admin as "后台健康入口"
participant Store as "监控存储(外部)"
App->>DBM : 获取数据库连接
DBM-->>App : 返回连接/错误
Note over DBM,Store : 记录连接池使用数、失败次数、耗时
App->>Cache : get/add/update
Cache-->>App : 命中/未命中
Note over Cache,Store : 记录命中率、写入失败
App->>FS : 上传/更新附件
FS-->>App : 成功/失败
Note over FS,Store : 记录文件大小、路径、时间
App->>Admin : 健康检查/监控查询
Admin-->>Store : 拉取/汇总指标
Store-->>Admin : 指标结果

详细组件分析

数据库连接状态监控

目标

  • 连接池使用情况:活跃连接数、最大连接数、复用率
  • 慢查询检测:超过阈值的查询耗时统计
  • 连接超时监控:连接建立耗时与失败率

接入要点

  • 在连接获取处埋点:记录每次获取连接的耗时、是否命中缓存连接、是否失败。
  • 在连接对象上增加执行SQL的拦截点:记录SQL文本、耗时、影响行数,超过阈值记为慢查询。
  • 对连接失败进行计数与告警:如连续失败达到阈值触发通知。
flowchart TD
Start(["开始"]) --> GetConn["获取数据库连接"]
GetConn --> HitPool{"命中连接池?"}
HitPool --> |是| UseConn["复用连接"]
HitPool --> |否| NewConn["新建连接"]
UseConn --> Exec["执行SQL"]
NewConn --> Exec
Exec --> Slow{"是否慢查询?"}
Slow --> |是| LogSlow["记录慢查询"]
Slow --> |否| Done["完成"]
LogSlow --> Done

磁盘空间监控

目标

  • 存储目录使用量:images/upload、主题图片、模块媒体等
  • 日志文件大小:运行日志、备份文件、AI调用日志等
  • 临时文件清理策略:分块上传中间件、缩略图、草稿文件

接入要点

  • 通过文件系统配置确定根目录与子目录,定期扫描目录大小并上报。
  • 针对附件上传记录的大小与时间戳,结合清理规则(如超过N天未使用删除)。
  • 备份文件列表与大小可在后台查看,便于评估存储空间趋势。
flowchart TD
S(["定时任务"]) --> Scan["扫描存储目录"]
Scan --> Size["计算目录大小"]
Size --> Report["上报到监控系统"]
Report --> Clean{"是否需要清理?"}
Clean --> |是| Purge["按策略清理临时/旧文件"]
Clean --> |否| End(["结束"])
Purge --> End

内存使用监控

目标

  • PHP进程内存占用:峰值内存、平均内存、OOM风险
  • 缓存命中率:get命中比例、写失败率
  • 会话数据存储监控:会话数量、大小、过期清理

接入要点

  • 在缓存适配器调用前后记录命中/未命中与异常,计算命中率。
  • 在PHP生命周期结束时收集内存使用信息(如进程内存、GC统计),上报至监控系统。
  • 会话数据可通过Redis/Memcache等键空间统计数量与大小,设置过期与清理策略。
sequenceDiagram
participant App as "应用"
participant Cache as "缓存适配器"
participant Mon as "监控采集"
App->>Cache : get(key)
Cache-->>App : value or false
Cache->>Mon : 记录命中/未命中
App->>Cache : add/update(key, value)
Cache-->>App : success/fail
Cache->>Mon : 记录写入失败

服务器资源监控

目标

  • CPU负载、内存使用、网络I/O、磁盘I/O
  • Web进程数、队列长度、错误率

接入要点

  • 通过系统命令或Agent采集OS指标,周期性上报到集中式监控系统。
  • 将DouPHP的应用指标(连接失败、缓存命中率、上传失败)与系统指标关联分析。

说明:此部分为通用实践,不直接绑定具体代码文件。

监控数据采集与存储方案

  • 采集点
    • 数据库:连接池使用、慢查询、连接失败
    • 缓存:命中率、写入失败
    • 文件:目录大小、附件大小、清理事件
    • 应用:错误率、响应时间、并发数
  • 存储
    • 时序数据库(如Prometheus/InfluxDB)存储指标
    • 日志系统(如ELK)存储慢查询与错误日志
  • 查询与分析
    • 基于时间窗口的聚合查询(QPS、P95/P99延迟、错误率)
    • 关联分析(如慢查询与CPU峰值、连接失败与缓存失效)

说明:此部分为通用实践,不直接绑定具体代码文件。

历史数据查询与分析方法

  • 指标维度:时间、模块、接口、主机、数据库节点
  • 常用分析
    • 趋势分析:观察指标随时间的变化
    • 对比分析:同比/环比,定位异常时段
    • 根因分析:关联多指标,定位瓶颈

说明:此部分为通用实践,不直接绑定具体代码文件。

依赖关系分析

  • 配置依赖:数据库与文件系统配置决定监控采集范围
  • 组件耦合:连接管理与缓存适配器是监控的主要接入点
  • 外部依赖:监控系统、日志系统、操作系统工具
graph LR
Config["配置中心"] --> DBM["数据库连接管理"]
Config --> FS["文件系统"]
DBM --> Monitor["监控系统"]
Cache["缓存适配器"] --> Monitor
FS --> Monitor
Health["后台健康入口"] --> Monitor

性能考虑

  • 监控埋点应轻量,避免阻塞主流程;采用异步上报或批量写入。
  • 慢查询阈值需根据业务场景调优,避免误报。
  • 缓存命中率统计应避免频繁锁竞争,使用原子计数器或无锁结构。
  • 文件扫描与清理任务应错峰执行,避免IO高峰。

说明:此部分为通用实践,不直接绑定具体代码文件。

故障排查指南

常见问题与定位思路

  • 数据库连接失败
    • 检查连接配置与网络连通性
    • 查看连接失败计数与最近失败堆栈
    • 确认连接池是否耗尽
  • 慢查询增多
    • 提取慢查询SQL,分析索引与执行计划
    • 关联CPU与IO峰值,判断是否为热点表
  • 缓存命中率下降
    • 检查缓存实例健康与容量
    • 分析key分布与过期策略
  • 磁盘空间不足
    • 扫描大目录与大文件,定位增长原因
    • 清理临时文件与过期备份

结论

通过在DouPHP的关键接入点(数据库连接管理、缓存适配器、文件与附件处理、后台健康入口)实施轻量埋点,并结合外部监控系统与日志系统,可以构建完整的系统监控体系。建议从数据库与缓存入手,逐步扩展到文件与系统资源,形成闭环的采集、存储、分析与告警能力。

附录

  • 配置项参考
    • 数据库:host、dbname、user、pass、prefix、charset、debug
    • 文件系统:默认驱动、上传上限、允许扩展名、图片质量、缩略图目录
    • 系统常量:前台固定模块、小程序内建模块、保留URL段等
添加日期:2026-10-05