Hyperf需借助外部exporter监控数据库和Redis连接数:MySQL用mysqld_exporter采集threads_connected等指标,Redis用redis_exporter采集connected_clients等指标,同时可选启用hyperf/metric获取进程内连接池状态。

Hyperf 本身不直接暴露数据库或 Redis 的连接数实时状态,它只上报自身进程内可观测的指标(比如查询耗时、协程数),而连接池实际占用、空闲、排队等关键连接数信息,必须依赖外部 exporter 采集 MySQL/Redis 原生运行时指标,并与 Hyperf 的业务指标做关联分析。
下面分三类常见场景说明如何落地连接数监控:
数据库连接池使用量监控(MySQL)
Hyperf 的 hyperf_db_query_duration_ms 不含连接获取等待时间,无法反映连接池是否打满。真实连接数要看 MySQL 服务端状态:
-
关键指标来自
mysqld_exporter:-
mysql_global_status_threads_connected:当前已建立的客户端连接数 -
mysql_global_status_threads_created:历史创建过的连接总数(突增说明频繁重连) -
mysql_global_status_aborted_connects:失败连接数(密码错、权限不足、max_connections 超限等)
-
-
配置要点:
- 创建最小权限账号:
exporter用户仅需PROCESS,REPLICATION CLIENT,SELECT - Prometheus 抓取 job 应指向
mysqld_exporter(如targets: ['mysqld-exporter:9104']),不是 MySQL 本身 - Grafana 中可画「连接数趋势」+「连接数 / max_connections 百分比」,阈值建议设为 85%
- 创建最小权限账号:
Redis 连接数与活跃连接监控
Hyperf 的 hyperf/redis 连接池是复用连接的,但 Redis 服务端看到的是每个 PHP 进程建立的 TCP 连接。要监控真实连接数:
-
redis_exporter提供的核心指标:-
redis_connected_clients:当前客户端连接数(含 Hyperf、其他服务、CLI 等) -
redis_blocked_clients:被阻塞(如 BLPOP)的客户端数 -
redis_rejected_connections_total:因maxclients达到上限被拒绝的连接次数
-
-
注意事项:
- 若使用 Swow,确保
hyperf/redis≥ v3.2.5 并启用SwowHandler -
redis_exporter启动时需正确填写--redis.addr(容器间通信填服务名,非127.0.0.1) - Prometheus 抓取失败常见原因是认证失败或网络不通,优先检查
Status > Targets
- 若使用 Swow,确保
Hyperf 进程内连接池状态监控(可选增强)
虽然不反映服务端真实连接数,但可辅助判断应用层是否配置失当:
-
启用
hyperf/metric后,部分连接池组件(如hyperf/database)会暴露以下指标(需确认版本支持):-
hyperf_db_pool_idle_connections{pool="default"}:空闲连接数 -
hyperf_db_pool_active_connections{pool="default"}:活跃连接数(已借出未归还) -
hyperf_db_pool_wait_duration_seconds_sum:排队等待总时长(若持续增长,说明池子小或慢查询多)
-
-
使用前提:
-
config/autoload/metric.php中开启enable => true -
use_standalone_process => true(避免指标采集干扰业务协程) - 指标路径
/metrics可访问且返回含hyperf_db_pool_.*的内容
-
不复杂但容易忽略


















