前言
Redis承担缓存、分布式锁或限流等任务后,服务进程仍在运行,并不代表实例状态完全正常。内存持续增长、连接数接近上限、缓存命中率下降或主从同步异常,都可能在业务明显报错前逐渐出现。
redis_exporter可以读取Redis的运行信息,并将内存、连接、命令、持久化和网络等数据转换为Prometheus能够抓取的指标。Prometheus再按照固定周期保存这些数据,并通过PromQL和告警规则判断异常状态。
本文将部署redis_exporter并验证/metrics端点,随后安装Prometheus,配置指标抓取任务,再添加Redis宕机、内存使用率、连接数和复制状态等基础规则。
如果Prometheus与Redis不在同一个局域网,后续还会使用cpolar为redis_exporter的9121端口建立远程抓取入口。公开指标端点前,需要先确认抓取协议、任务标签和访问范围,避免监控数据被无关人员读取。


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):
shell
wget https://github.com/oliver006/redis_exporter/releases/download/v0.21.2/redis_exporter-v0.21.2.linux-amd64.tar.gz

解压该文件:
shell
tar -zxvf redis_exporter-v0.21.2.linux-amd64.tar.gz

解压后启动,启动命令:
- 如果redis设置有密码,启动命令
shell
nohup ./redis_exporter -redis.addr 你的redis的ip:6379 -redis.password 密码 -web.listen-address :9121 &
- redis没有密码,则启动命令
shell
nohup ./redis_exporter -redis.addr 你的redis的ip:6379 -web.listen-address :9121 &
- 如果redis和edis_exporter部署在同一服务器上可以把ip换成localhost启动:
shell
nohup ./redis_exporter -redis.addr localhost:6379 -web.listen-address :9121 &
验证是否启动成功:
shell
ps -ef|grep redis_exporter

启动后浏览器通过如下url可查看redis_exporter监控到的数据
bash
http://服务器ip:9121/metrics

进入这个目录,使用systemctl管理redis_exporter:
shell
vim /usr/lib/systemd/system/redis_exporter.service
shell
[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

启动设置服务:
shell
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
3.安装prometheus
通过以下命令创建一个用于存放Prometheus的目录 /app:
shell
mkdir /app
进入到/app目录下:
shell
cd /app

从prometheus官网下载压缩文件:https://prometheus.io/download/
下载适用于Linux系统的文件。

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

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


使用命令查看,我这里显示已经上传成功。
shell
ls
给这个文件解压缩:
shell
tar -xzvf prometheus-3.5.0.linux-amd64.tar.gz

将解压好的文件夹改一个名字,并删除原有的未解压文件(可以不删):
shell
mv prometheus-3.5.0.linux-amd64 prometheus
rm -rf prometheus-3.5.0.linux-amd64.tar.gz

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

创建prometheus 本地TSDB数据存储目录:
shell
mkdir -p /var/lib/prometheus
进入这个目录,使用systemctl管理Prometheus:
shell
vim /usr/lib/systemd/system/prometheus.service
写入:
shell
[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

启动设置服务:
shell
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
ip+端口就可以进入prometheus啦:
shell
ip:9200

4.配置prometheus监控redis_exporter
找到prometheus的配置文件,编辑添加如下内容:
shell
vi prometheus.yml
shell
- targets: ["localhost:9121"]
labels:
app: "redis_exporter"

重启prometheus服务:
shell
systemctl restart prometheus
使用浏览器Ip+9090打开promethues的页面:

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

5.使用alertmanager配置redis_exporter告警
没有alertmanager的小伙伴可以参考这篇文章:告别宕机!零基础搭建服务器监控告警系统!小白也能学会!
配置redis告警。我这里举两个例子:
shell
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."

编辑为7.yml,接下来配置prometheus告警:
进入prometheus配置文件:
找到prometheus的配置文件,编辑添加如下内容:
shell
vi prometheus.yml
shell
rule_files:
- "/app/prometheus/7.yml"

重启prometheus服务:
shell
systemctl restart prometheus
使用浏览器Ip+9090打开promethues的页面:

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

那么问题来了,倘若我想监控朋友的redis,但是我们不在一个局域网,怎么办?别急cpolar来帮助你!
6.安装cpolar内网穿透工具
cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。
❤️以下是安装cpolar步骤:
使用一键脚本安装命令:
shell
sudo curl https://get.cpolar.sh | sh

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

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

7.配置公网地址
登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理------创建隧道:
-
隧道名称:可自定义,本例使用了:redis_exporter,注意不要与已有的隧道名称重复
-
协议:http
-
本地地址:9121
-
域名类型:随机域名
-
地区:选择China Top

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

访问成功。

8.将本redis_exporter暴露给Prometheus进行远程抓取
Prometheus可以通过这个公网地址a214e29.r2.cpolar.top访问到运行在本地9105端口的redis_exporter服务,从而抓取系统指标。
shell
- targets: ["a214e29.r2.cpolar.top"]
labels:
app: "redis_exporter"

抓取成功!

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

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

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

修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名
- 地区: China Top
点击更新

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

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

结尾
完成以上配置后,redis_exporter已经可以从Redis读取运行信息,并通过9121端口输出Prometheus格式的指标。Prometheus添加对应抓取任务后,可以持续保存这些数据,并在查询页面中检查目标是否处于正常状态。
告警规则能够根据指标表达式计算Redis宕机、内存使用率过高、连接数接近上限和主从连接异常等状态。不过,规则进入Firing状态不等于通知已经成功发送。
本文只展示了rule_files配置,没有完整配置Prometheus连接Alertmanager的地址,也没有设置通知路由和接收渠道。需要收到邮件、钉钉或其他通知时,还应继续完成Alertmanager服务、alerting配置及通知模板。
配置规则前,应先统一Prometheus任务名称与标签。正文抓取配置使用了app="redis_exporter",而告警表达式筛选的是job="redis",两者不一致时,相关规则可能无法匹配指标。
内存使用率规则也需要考虑Redis未设置maxmemory的情况。如果最大内存指标为0,不应直接作为除数。主从复制相关指标则需要根据当前redis_exporter实际输出的指标名和标签重新确认。
通过cpolar公开9121端口后,异地Prometheus可以抓取本地redis_exporter指标。使用HTTPS公网地址时,需要在抓取任务中明确设置正确的scheme、目标端口和metrics_path,不能只替换一个域名后默认所有配置都会生效。
redis_exporter的/metrics端点通常没有独立登录认证。虽然其中一般不包含Redis具体数据值,但仍可能暴露版本、内存、连接、Key数量和复制拓扑等运行信息,因此固定地址不应作为普通网页公开分享。
正式运行前,还应检查systemd中的redis_exporter执行路径,并创建对应的运行用户。Redis需要密码时,不建议把密码长期直接写在命令历史和公开配置中,应限制服务文件读取权限,并使用权限受限的Redis监控账号。
Prometheus长期保存时序数据会持续占用磁盘。除了监控Redis本身,还需要设置合理的数据保留周期,检查Prometheus存储目录容量,并备份抓取配置、规则文件和Alertmanager配置。
这套方案能够建立Redis监控的基础链路,但可观测性还需要结合Grafana展示、通知送达测试和故障演练。只有实际停止Redis、制造连接或复制异常,并验证指标、规则和通知全部生效,才能确认整套监控链路可以用于持续运行。