hyperf 的 /metrics 不含 redis qps 和命中率指标,因其 metric 组件仅监控自身运行时,不采集 redis 命令统计;需通过 redis_exporter 主动抓取 redis info 数据并暴露给 prometheus。

Hyperf 本身不直接暴露 Redis 的 QPS 和命中率指标,必须通过 redis_exporter 采集 Redis 实例原生指标,再由 Prometheus 抓取、Grafana 可视化——跳过 redis_exporter 这一层,所有面板都会显示 “no data”。
为什么/metrics里看不到redis_qps或redis_hit_rate
Hyperf 的 hyperf/metric 组件只监控自身协程、HTTP 请求、Worker 等运行时指标,不代理或转发 Redis 客户端的命令统计。Redis 的 INFO commandstats 和 INFO stats 数据需由 redis_exporter 主动连接 Redis 并解析,Hyperf 应用层无感知。
- Hyperf 中调用
$redis->get()不会自动上报到 /metrics,除非你手动埋点(不推荐,侵入性强) - 即使启用了
hyperf/redis的连接池,也仅复用连接,不收集命令频次或 key 命中行为 - 真正能反映 Redis QPS 的是
redis_commands_processed_total(累计计数器),命中率依赖redis_keyspace_hits_total和redis_keyspace_misses_total
redis_exporter 启动与 Prometheus 抓取配置要点
本地调试时,redis_exporter 默认监听 9121 端口,但必须确保它能连上你的 Redis 实例——尤其是 Hyperf 容器内访问宿主 Redis 或跨网络场景。
- 启动命令示例:
./redis_exporter --redis.addr redis://127.0.0.1:6379 --redis.password=yourpass - 若 Redis 在 Docker 中且 Hyperf 在另一容器,
--redis.addr应填容器名(如redis://redis:6379)或宿主机 IP(Mac/Windows 用host.docker.internal,Linux 用真实局域网 IP) - Prometheus
scrape_configs中 job_name 别写成'hyperf',要明确为'redis',targets 指向redis_exporter地址,不是 Redis 本身:targets: ['localhost:9121'] - 抓取失败时,进 Prometheus 的
Status > Targets页面看错误详情;常见报错connection refused表示 redis_exporter 没起来,context deadline exceeded多因网络不通或 Redis 认证失败
Grafana 面板中 QPS 与命中率的 PromQL 写法
QPS 是速率,命中率是比值,两者都不能直接用原始 counter,必须用 PromQL 函数转换,否则数值毫无意义。
- Redis QPS(每秒命令数):
rate(redis_commands_processed_total[1m])—— 注意用rate(),不是irate(),避免瞬时抖动误判 - Key 命中率(最近 5 分钟):
sum(rate(redis_keyspace_hits_total[5m])) / (sum(rate(redis_keyspace_hits_total[5m])) + sum(rate(redis_keyspace_misses_total[5m]))) - 如果 Grafana 面板导入后显示空数据,先在 Prometheus Graph 中单独执行上述表达式,确认有返回值;若无,说明 redis_exporter 没采集到数据,或 Redis 未开启
CONFIG SET notify-keyspace-events Ex(非必需,但部分指标依赖) - 命中率结果是 0–1 的小数,Grafana 面板中建议设置 Y 轴格式为
Percentage (0-1),更直观
容易被忽略的两个硬性前提
很多团队卡在最后一步:Prometheus 能看到指标,Grafana 却画不出图。问题往往不在配置,而在数据源头是否“活”。
-
redis_exporter必须使用与 Redis 版本兼容的二进制(例如 Redis 7.x 推荐用 v1.50.0+),旧版可能无法解析新字段,导致redis_keyspace_hits_total等关键指标缺失 - Redis 实例需至少执行过一次读写操作,否则
keyspace_hits和keyspace_misses初始为 0,PromQL 计算时分母为 0 会返回NaN,Grafana 显示为空——可先用redis-cli手动SET test 1和GET test触发统计











