Redis作为高频使用的内存数据库,其性能波动会直接影响业务接口的响应速度。要让运维人员及时掌握Redis的健康状况,就必须把它的运行指标持续收集起来。Prometheus凭借强大的时序存储和灵活查询语言,已成为云原生监控的主流选择,但两者并不直接互通,需要一套明确的采集方案。

为什么Redis不能直接被Prometheus采集
Prometheus采用拉模型,它周期性地向被监控目标的HTTP接口请求符合特定文本格式的指标数据。而Redis提供的是专属的RESP协议,通过redis-cli或客户端发送命令如INFO来获取服务器状态。INFO命令返回的是分段的纯文本,包含内存、持久化、复制等信息,却完全没有Prometheus要求的指标命名、类型声明和注释。
如果强行让Prometheus去连Redis端口,它无法解析返回内容,也不会识别其中的数值含义。因此,必须在中间加一个转换层,把Redis的内部状态翻译成Prometheus能懂的指标格式。这也正是各类exporter存在的核心价值,它们屏蔽了后端系统的协议差异,统一输出监控标准。
redis_exporter的工作机制
redis_exporter是一个独立运行的进程,启动时会配置Redis的地址、密码及端口。它内部通过Redis客户端周期性执行INFO、CLIENT LIST、SLOWLOG等命令,把得到的原始数据加工成counter、gauge等类型的指标。例如,将used_memory字节数转为redis_memory_used_bytes,将keyspace命中次数转为redis_keyspace_hits_total。
exporter自身暴露一个HTTP端口,通常是9121,Prometheus在配置文件中把该地址加入scrape_configs,就能定时拉取加工好的指标。这样Redis实例无需任何改动,监控侧也拿到了统一格式的数据。在多实例场景下,可以用同一个exporter通过URL参数指定不同Redis,或者每个Redis配一个exporter,由Prometheus服务发现统一管理。
基础部署示例
在单机环境,可以直接用二进制启动:./redis_exporter -redis.addr=redis://127.0.0.1:6379 -redis.password=你的密码。启动后访问 http://服务器IP:9121/metrics 就能看到输出的指标列表。确认无误后,在Prometheus的yaml里增加job,目标指向该IP和端口。
对于容器环境,官方提供了镜像,可以用docker run -d -p 9121:9121 oliver006/redis_exporter。配合Kubernetes的ServiceMonitor,能实现Redis Pod的自动发现与采集,大幅降低人工维护成本。
关键指标与监控看板设计
采集到的指标很多,但日常最该关注的是内存、连接、命中率和持久化延迟。内存方面看redis_memory_used_bytes和maxmemory,防止写满触发淘汰。连接数观察redis_connected_clients,异常飙升往往意味着连接泄漏或雪崩前兆。
命中率由redis_keyspace_hits_total与misses_total计算,低于一定阈值说明缓存设计有问题。慢查询通过exporter暴露的慢日志长度指标预警。把这些指标放进Grafana,配合Prometheus告警规则,例如内存超八成、客户端连接超五千,就能在故障前通知值班人。
| 指标名称 | 类型 | 监控意义 |
|---|---|---|
| redis_memory_used_bytes | gauge | 反映当前内存占用,评估容量风险 |
| redis_connected_clients | gauge | 实时连接数,发现异常连接增长 |
| redis_keyspace_hits_total | counter | 累计命中次数,计算缓存效率 |
| redis_up | gauge | 实例是否可达,值为0即采集失败 |
常见坑点与优化建议
第一个坑是密码含特殊字符时,exporter启动参数要做URL编码,否则连不上。第二个坑是Redis主从实例如果都用同一个exporter地址,可能采到错误角色数据,建议通过Redis的role指标过滤,或在scrape时打不同标签。
第三个坑是采集频率过高会增加Redis负担,一般设置十五到三十秒一次足够。若Redis集群规模大,可启用exporter的脚本采集能力,只暴露关心的指标,减少网络和计算开销。做好这些细节,Redis与Prometheus的指标体系才能长期稳定支撑业务监控。
Redis监控Prometheus指标采集redis_exporter修改时间:2026-08-11 03:33:23