从零开始:使用redis_exporter + Prometheus监控你的Redis实例

前言

Redis作为高性能的内存键值数据库,凭借低延迟、高吞吐的核心优势,广泛应用于缓存加速、热点数据存储、分布式锁、限流控频等核心业务场景,是互联网、云计算、大数据等领域不可或缺的基础中间件。在业务高速迭代、流量持续波动的生产环境中,Redis实例的运行状态直接影响业务稳定性与用户体验,内存溢出、连接数打满、缓存命中率异常、节点宕机、命令执行超时等问题,若无法及时感知、定位与处置,极易引发业务卡顿、数据失效、服务雪崩等故障,给系统运行带来极大风险。因此,搭建一套轻量化、标准化、可落地的Redis实时监控体系,是保障业务平稳运行、实现故障前置预警的核心刚需。

redis_monitoring_cover_blueprint

在众多Redis监控方案中,基于Prometheus + redis_exporter的监控架构,凭借开源免费、部署灵活、兼容性强、指标维度全面的优势,成为当下云原生与传统运维场景的主流选择。其中,redis_exporter作为专属数据采集组件,可无缝对接各类版本的Redis单机、哨兵及集群实例,精准采集内存占用、客户端连接、键值统计、命令执行、持久化状态、网络流量等全维度运行指标,并将Redis原生数据转换为Prometheus可识别的时序数据格式,打通Redis与监控系统的数据壁垒;而Prometheus凭借强大的时序数据存储、灵活的PromQL查询能力、自定义告警规则等特性,可实现指标数据的持久化存储、实时分析与异常预警,二者搭配构建起轻量化、高可靠的 Redis 可观测体系。

redis_monitoring_cover_dark

目前多数监控教程存在步骤零散、配置不规范、适配场景单一等问题,新手入门极易出现配置报错、指标采集不全、监控失效等问题,缺乏一套从零起步、通俗易懂、可直接落地的完整实操方案。基于此,本文聚焦零基础落地需求,系统性讲解redis_exporter + Prometheus监控Redis实例的全流程操作,从环境准备、组件部署、参数配置,到指标采集验证、监控规则优化、常见问题排查,层层拆解核心步骤,规避传统监控搭建中的各类坑点。

redis_preface_observability

全文摒弃复杂理论堆砌,以实操落地为核心,适配单机、集群等主流Redis部署架构,兼顾新手入门与运维优化需求,帮助读者快速搭建标准化、常态化的Redis监控体系,精准掌握实例运行状态,提前预判性能瓶颈与潜在故障,为Redis稳定、高效运行提供全方位的运维保障。

Redis监控配置

1.redis_exporter介绍

1.1 什么是redis_exporter?

redis_exporter是一款开源、轻量、专为Redis设计的Prometheus指标采集导出工具,也是Prometheus生态中监控Redis的标准专属采集组件。

简单来说:Redis本身不支持Prometheus时序指标输出,redis_exporter就是中间翻译、采集、转发的适配器

它独立部署、无侵入、无需修改Redis源码和配置,兼容Redis单机、哨兵、集群、云托管Redis等几乎所有部署形态。

1.2 redis_exporter可以做什么

1.全维度采集Redis运行指标

持续抓取Redis实例的核心运行数据,覆盖运维排查、性能分析所需的全部维度:

  • 资源指标:内存使用、内存碎片率、最大内存限制、内存溢出情况
  • 连接指标:客户端连接数、阻塞连接、拒绝连接、空闲连接
  • 数据指标:Key总数、过期Key、删除Key、缓存命中率
  • 命令指标:各类Redis命令(GET/SET/DEL 等)调用次数、耗时、QPS
  • 持久化指标:RDB/AOF持久化状态、落盘耗时、失败次数
  • 网络指标:网络流入 / 流出流量、连接异常数
  • 集群 / 哨兵指标:集群节点状态、主从同步延迟、哨兵监控状态

2.协议转换,适配Prometheus

Redis输出的是原生运维信息,无法直接被Prometheus识别

redis_exporter的核心工作就是:

定时读取Redis INFO信息、统计数据 → 标准化转为Prometheus可识别的时序Metric指标 → 以 HTTP 接口暴露,供Prometheus定时拉取。

3.无侵入监控,部署简单

  • 无需停业务、无需改Redis配置、无需重启数据库
  • 单进程轻量运行,资源占用极低
  • 支持多实例批量监控、权限密码适配、tls加密连接

4.支撑可视化与告警

采集后的标准化指标,可对接Grafana实现可视化大屏,同时支持Prometheus配置告警规则,实现内存过载、连接打满、缓存失效、主从延迟过高、实例宕机等场景的自动预警。

2.安装redis_exporter

还没有redis的小伙伴可以参考这篇文章:零基础搭建缓存,Redis 完整安装部署实操教程
使用wget连接GitHub,下载该.tar.gz文件到当前目录(目录自定义/app/redis_exporter):

wget https://github.com/oliver006/redis_exporter/releases/download/v0.21.2/redis_exporter-v0.21.2.linux-amd64.tar.gz

image-20260616150400275

解压该文件:

tar -zxvf redis_exporter-v0.21.2.linux-amd64.tar.gz

image-20260616160907540

解压后启动,启动命令:

  • 如果redis设置有密码,启动命令
nohup ./redis_exporter -redis.addr 你的redis的ip:6379  -redis.password 密码  -web.listen-address :9121 &
  • redis没有密码,则启动命令
nohup ./redis_exporter -redis.addr 你的redis的ip:6379  -web.listen-address :9121 &
  • 如果redis和edis_exporter部署在同一服务器上可以把ip换成localhost启动:
nohup ./redis_exporter -redis.addr localhost:6379  -web.listen-address :9121 &

验证是否启动成功:

ps -ef|grep redis_exporter

image-20260616160255994

启动后浏览器通过如下url可查看redis_exporter监控到的数据

http://服务器ip:9121/metrics

image-20260616162508638

进入这个目录,使用systemctl管理redis_exporter:

vim /usr/lib/systemd/system/redis_exporter.service
[Unit]
Description=Redis Exporter for Prometheus
Documentation=https://github.com/oliver006/redis_exporter
After=network.target

[Service]
Type=simple
User=redis-exporter
Group=redis-exporter
ExecStart=/app/redis_exporter/redis_exporter \
    --redis.addr=redis://localhost:6379 \
    --web.listen-address=:9121 \
    --web.telemetry-path=/metrics
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=redis_exporter

[Install]
WantedBy=multi-user.target

image-20260616165807206

启动设置服务:

systemctl enable prometheus 
systemctl start prometheus
systemctl status prometheus

3.安装prometheus

通过以下命令创建一个用于存放Prometheus的目录 /app:

mkdir /app

进入到/app目录下:

cd /app

57aeee0a614bb52148083695e8848617

从prometheus官网下载压缩文件:https://prometheus.io/download/

下载适用于Linux系统的文件。

image-20250722152450438

使用的是MobaXterm_Personal,这是一种功能强大的终端工具,常用于远程连接Linux服务器。

进入/app下面。

233962893bf1d8a97a88fd978bab31d5

进入后点击这个“上传按钮”,上传下载好的文件。

4f214748633acecca04e8f81ec6733de

bd77a64771b981ce7673736e81d1b322

使用命令查看,我这里显示已经上传成功。

ls

给这个文件解压缩:

tar -xzvf prometheus-3.5.0.linux-amd64.tar.gz

ff36fb59701a977e750f4c8b5bc95143

将解压好的文件夹改一个名字,并删除原有的未解压文件(可以不删):

mv prometheus-3.5.0.linux-amd64 prometheus
rm -rf prometheus-3.5.0.linux-amd64.tar.gz

e281c4b982c4543da28cf8a6c3a0f1a2

进入解压好并且改过名的prometheus目录下,查看它的版本。返回版本号代表安装成功!

cd /app/prometheus
./prometheus --version

12902663abd2d1815441eaed325cc61b

创建prometheus 本地TSDB数据存储目录:

mkdir -p /var/lib/prometheus

进入这个目录,使用systemctl管理Prometheus:

vim /usr/lib/systemd/system/prometheus.service

写入:

[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target

[Service]
# Type设置为notify时,服务会不断重启
Type=simple
User=root
# --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
ExecStart=/app/prometheus/prometheus --config.file=/app/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

e19b2f2c4c069603dfc30cfb6e0fba6b

启动设置服务:

systemctl enable prometheus 
systemctl start prometheus
systemctl status prometheus

ip+端口就可以进入prometheus啦:

ip:9200

image-20250722165846987

4.配置prometheus监控redis_exporter

找到prometheus的配置文件,编辑添加如下内容:

vi prometheus.yml
      - targets: ["localhost:9121"]
        labels:
          app: "redis_exporter"

image-20260617162622765

重启prometheus服务:

systemctl restart prometheus

使用浏览器Ip+9090打开promethues的页面:

image-20260617162807284

我们可以看到成功的检测到了redis_exporter服务啦!

image-20260617162758955

5.使用alertmanager配置redis_exporter告警

没有alertmanager的小伙伴可以参考这篇文章:告别宕机!零基础搭建服务器监控告警系统!小白也能学会!

配置redis告警。我这里举两个例子:

groups:
  - name: redis-alerts
    rules:
      # Redis 实例宕机(Exporter 无响应)
      - alert: RedisDown
        expr: up{job="redis"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Redis instance down"
          description: "Redis instance {{ $labels.instance }} is down for more than 1 minute."

      # Redis 内存使用率过高(>85%)
      - alert: RedisMemoryHigh
        expr: redis_memory_used_bytes{job="redis"} / redis_memory_max_bytes{job="redis"} > 0.85
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "Redis memory usage high"
          description: "Redis instance {{ $labels.instance }} memory usage is above 85% (current value: {{ $value | humanizePercentage }})."

      # Redis 连接数接近上限(>90%)
      - alert: RedisTooManyConnections
        expr: redis_connected_clients{job="redis"} / redis_config_maxclients{job="redis"} > 0.9
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "Redis too many connections"
          description: "Redis instance {{ $labels.instance }} has too many clients ({{ $value | humanizePercentage }} of max)."

      # Redis 主从复制延迟(仅适用于主从架构)
      - alert: RedisReplicationLag
        expr: redis_slave_info{master_link_status="down", job="redis"} == 1
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Redis replication broken"
          description: "Redis slave {{ $labels.instance }} lost connection to master."

image-20260617173249740

编辑为7.yml,接下来配置prometheus告警:

进入prometheus配置文件:

找到prometheus的配置文件,编辑添加如下内容:

vi prometheus.yml
rule_files:
  -  "/app/prometheus/7.yml"

image-20260617173403615

重启prometheus服务:

systemctl restart prometheus

使用浏览器Ip+9090打开promethues的页面:

image-20251125103926501

可以看到,我们设置好的告警就出来啦!

image-20260617173457500

那么问题来了,倘若我想监控朋友的redis,但是我们不在一个局域网,怎么办?别急cpolar来帮助你!

6.安装cpolar内网穿透工具

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

官网在此:https://www.cpolar.com

使用一键脚本安装命令:

sudo curl https://get.cpolar.sh | sh

image-20250814101639846

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudo systemctl status cpolar

22e5adfaf290a17fc3384bb296055259

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

8a6698b1bf26d64ba3645827fbfb1c29

7.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:redis_exporter,注意不要与已有的隧道名称重复

  • 协议:http

  • 本地地址:9121

  • 域名类型:随机域名

  • 地区:选择China Top

image-20260617173910191

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

image-20260617173951429

访问成功。

image-20260617174016526

8.将本redis_exporter暴露给Prometheus进行远程抓取

Prometheus可以通过这个公网地址a214e29.r2.cpolar.top访问到运行在本地9105端口的redis_exporter服务,从而抓取系统指标。

      - targets: ["a214e29.r2.cpolar.top"]
        labels:
          app: "redis_exporter"

image-20260617174130627

抓取成功!

image-20260617174211052

9.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

image-20251125141035399

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我这里演示使用的是redis,大家可以自定义。填写备注信息,点击保留。

image-20260617174340814

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道redis_exporter,点击右侧的编辑

image-20260617174405394

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

image-20260617174433208

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

image-20260617174445697

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

image-20260617174500112

结尾

通过本文,我们一步步完成了从部署Redis Exporter、配置Prometheus抓取指标,到定义关键告警规则并集成Alertmanager的全过程。现在,你的Redis实例不再是一个“黑盒”——内存使用、连接数、主从状态等核心指标尽在掌握,异常情况也能第一时间通知到你。

监控不是终点,而是稳定运维的起点。有了这套轻量却强大的可观测性基础,你可以进一步扩展:

  • 添加Grafana仪表盘实现可视化;
  • 结合业务指标做关联分析;
  • 在Kubernetes环境中自动化部署整套监控栈。

技术的价值在于落地。愿你从此告别“盲人摸象”式的 Redis 运维,真正实现可观测、可预警、可信赖的缓存服务管理。

监控一小步,稳定性一大步。现在,就去给你的 Redis 装上“眼睛”吧!

感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站

Share:

发表回复

目录

On Key

推荐文章