Redis作为最常用的内存数据库之一,一旦出现内存打满、连接数暴涨或者主从复制中断,往往直接影响线上业务。光靠info命令手动查看已经远远不够,借助redis_exporter把Redis的各项指标暴露给Prometheus,再用Grafana展示,是目前最主流的监控方案。本文将从零开始演示redis_exporter的部署全过程,覆盖二进制安装、Docker运行、systemd托管以及Prometheus配置,最后说明多实例和集群场景下的注意事项。

一、redis_exporter是什么,为什么需要它
redis_exporter是Prometheus官方生态中专门针对Redis的指标采集器,由oliver006维护。它的工作原理很简单:exporter本身作为一个HTTP服务运行,定时连接Redis实例执行INFO、CONFIG等命令,把返回的原始数据解析成Prometheus认识的metrics格式,然后暴露在/metrics端口上等待Prometheus来抓取。
与一些脚本化监控方案相比,redis_exporter的优势在于指标覆盖非常全面。它不仅采集基础的内存使用量、客户端连接数、每秒命令数,还包含键空间命中率、过期key数量、主从复制状态、RDB和AOF持久化状态等上百项指标。这些指标在排查性能问题时往往就是关键线索,比如命中率突然下降可能意味着大量冷数据被访问,而blocked_clients持续不为零则说明有命令在等待阻塞操作完成。
另外它对各种Redis部署形态都做了适配,单机、主从、哨兵、Cluster集群都能采集,只需要调整启动参数即可,这一点在后面的部署环节会具体讲到。
二、二进制方式部署redis_exporter
二进制部署是最直接的方式,适合物理机或虚拟机环境。首先到GitHub的oliver006/redis_exporter仓库下载对应平台的发布包,以Linux amd64为例:
# 下载并解压 wget https://github.com/oliver006/redis_exporter/releases/download/v1.58.0/redis_exporter-v1.58.0.linux-amd64.tar.gz tar -zxvf redis_exporter-v1.58.0.linux-amd64.tar.gz cd redis_exporter-v1.58.0.linux-amd64 # 移动到系统目录 cp redis_exporter /usr/local/bin/ chmod +x /usr/local/bin/redis_exporter # 验证版本 redis_exporter --version
解压出来就是一个单独的可执行文件,没有任何依赖,这是Go语言编写的好处。启动方式也非常简单,最基础的形式是直接指定Redis地址:
# 监控本机无密码的Redis redis_exporter -redis.addr 127.0.0.1:6379 -web.listen-address :9121
其中-redis.addr指定Redis的连接地址,默认值就是redis://localhost:6379;-web.listen-address指定exporter自身的监听端口,默认是9121。如果Redis设置了密码,加一个-redis.password参数即可。对于使用自定义用户和ACL的Redis 6以上版本,可以用-redis.user和-redis.password组合指定。
直接在命令行启动显然不适合生产环境,建议用systemd托管。创建服务文件/etc/systemd/system/redis_exporter.service:
[Unit] Description=Redis Exporter After=network.target [Service] Type=simple User=nobody ExecStart=/usr/local/bin/redis_exporter \ -redis.addr 127.0.0.1:6379 \ -redis.password yourpassword \ -web.listen-address :9121 Restart=on-failure [Install] WantedBy=multi-user.target
写好之后执行systemctl daemon-reload,再systemctl enable --now redis_exporter启动。用curl http://127.0.0.1:9121/metrics测试,如果能返回一大段带redis_前缀的指标文本,说明exporter已经正常工作。
三、Docker方式运行redis_exporter
容器化环境中用Docker跑redis_exporter更方便维护。官方镜像就是oliver006/redis_exporter,一条命令即可启动:
docker run -d \ --name redis-exporter \ --restart always \ -p 9121:9121 \ oliver006/redis_exporter \ -redis.addr redis://192.168.1.100:6379 \ -redis.password yourpassword
注意容器内的exporter访问宿主机或其他机器上的Redis时,地址不能写127.0.0.1,要写宿主机的真实IP或者容器网络内可达的地址。如果Redis本身也跑在同一个Docker网络里,直接用容器名或服务名作为主机名即可,这也是docker-compose部署时推荐的做法。
用docker-compose编排时可以这样写,把Redis和exporter放在同一个网络下:
version: "3"
services:
redis:
image: redis:7
command: redis-server --requirepass yourpassword
ports:
- "6379:6379"
redis-exporter:
image: oliver006/redis_exporter
ports:
- "9121:9121"
environment:
- REDIS_ADDR=redis://redis:6379
- REDIS_PASSWORD=yourpassword
depends_on:
- redisKubernetes环境下则推荐用ServiceMonitor或者给Redis Pod挂一个exporter sidecar容器,两种方式各有取舍。sidecar方式资源隔离好但每个Pod都要改配置,独立部署方式统一管理但抓取地址维护成本高,可以按团队习惯选择。
四、Prometheus端配置抓取任务
exporter部署好之后,还需要在Prometheus的配置文件prometheus.yml中添加抓取任务,让Prometheus定期去拉取9121端口的指标数据:
scrape_configs:
- job_name: 'redis_exporter'
static_configs:
- targets: ['192.168.1.100:9121']
labels:
instance: redis-prod-01修改完配置后重启Prometheus,或者用kill -HUP进程号的方式热加载。访问Prometheus的Web界面,在Status菜单下的Targets页面可以看到redis_exporter的状态变成UP,说明抓取链路已经打通。此时在Graph页面查询redis_up,值为1即表示exporter到Redis的连接正常。
五、多实例与集群场景的部署要点
一个redis_exporter默认只对应一个Redis实例。如果机器上有多个不同端口的Redis,有两种处理思路。第一种是起多个exporter进程,分别监听9121、9122等不同端口,Prometheus各自配置target,这种方式指标互相隔离,排查问题时目标明确。
第二种方式是利用redis_exporter的采集文件特性,通过redis-file参数指定一个包含多个Redis地址的JSON文件,exporter会为每个地址自动生成带instance标签的指标。这种方式管理起来集中,但所有实例共用一个exporter进程,一旦它挂掉所有监控都会中断,建议配合进程守护使用。
对于Redis Cluster集群,直接把任意一个节点的地址给exporter即可,exporter会自动发现集群中的其他节点并采集各分片指标,指标中会带上instance标签区分不同节点。需要注意的是如果集群开了密码并且各节点密码一致,配置一次即可;如果密码不一致则需要分别部署。哨兵模式建议对每个哨兵节点单独部署exporter,这样哨兵自身的状态也能被监控到,及时发现主从切换异常。
六、常见问题与排查
部署过程中最常见的问题是Prometheus显示target为DOWN。排查顺序建议先在exporter所在机器上curl一下metrics端口,确认exporter本身存活;再看exporter的日志中有没有连接Redis失败的报错,多数情况是密码错误或者网络不通;最后检查Prometheus到exporter之间的9121端口是否放通,云服务器上经常就是安全组没开端口导致的。
另一个容易忽略的点是指标中的redis_up一直为0但target是UP状态,这说明exporter运行正常但连不上Redis,重点检查Redis的bind配置和protected-mode设置。Redis默认只监听127.0.0.1时,远程exporter是连不上的,需要在redis.conf中调整bind参数并设置密码。监控上线后建议在Grafana导入官方推荐的11835号面板,配合告警规则对内存使用率、连接数、主从状态设置阈值,一套完整的Redis监控体系就算搭建完成了。
redis_exporter部署Redis监控Prometheus修改时间:2026-09-10 05:14:34