Redis监控怎么做?redis_exporter部署与配置完整教程

来源:主机评测作者:弥生美月头衔:网络博主
导读:本期聚焦于弥生美月创作的《Redis监控怎么做?redis_exporter部署与配置完整教程》,敬请观看详情。想让Redis集群的运行状态一目了然,redis_exporter是一个绕不开的工具。它能把Redis实例的内存使用、连接数、命中率、慢查询等关键指标转换为Prometheus可以抓取的格式,配合Grafana面板就能搭建一套完整的可视化监控体系。本文将详细介绍redis_exporter的下载安装过程,包括单实例部署和多实例分离部署两种方式,讲解systemd服务配置、Docker容器化运行,以及Prometheus端的抓取任务配置方法。同时还会覆盖带密码认证的Redis实例连接、主从架构与Cluster集群模式下的监控要点,帮你避开部署过程中的常见坑,快速上线一套稳定可用的Redis监控方案。

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

Redis监控怎么做?redis_exporter部署与配置完整教程

一、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:
      - redis

Kubernetes环境下则推荐用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

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260910/53832.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。