前言
Redis作为高性能的内存键值数据库,凭借低延迟、高吞吐的核心优势,广泛应用于缓存加速、热点数据存储、分布式锁、限流控频等核心业务场景,是互联网、云计算、大数据等领域不可或缺的基础中间件。在业务高速迭代、流量持续波动的生产环境中,Redis实例的运行状态直接影响业务稳定性与用户体验,内存溢出、连接数打满、缓存命中率异常、节点宕机、命令执行超时等问题,若无法及时感知、定位与处置,极易引发业务卡顿、数据失效、服务雪崩等故障,给系统运行带来极大风险。因此,搭建一套轻量化、标准化、可落地的Redis实时监控体系,是保障业务平稳运行、实现故障前置预警的核心刚需。
在众多Redis监控方案中,基于Prometheus + redis_exporter的监控架构,凭借开源免费、部署灵活、兼容性强、指标维度全面的优势,成为当下云原生与传统运维场景的主流选择。其中,redis_exporter作为专属数据采集组件,可无缝对接各类版本的Redis单机、哨兵及集群实例,精准采集内存占用、客户端连接、键值统计、命令执行、持久化状态、网络流量等全维度运行指标,并将Redis原生数据转换为Prometheus可识别的时序数据格式,打通Redis与监控系统的数据壁垒;而Prometheus凭借强大的时序数据存储、灵活的PromQL查询能力、自定义告警规则等特性,可实现指标数据的持久化存储、实时分析与异常预警,二者搭配构建起轻量化、高可靠的 Redis 可观测体系。
目前多数监控教程存在步骤零散、配置不规范、适配场景单一等问题,新手入门极易出现配置报错、指标采集不全、监控失效等问题,缺乏一套从零起步、通俗易懂、可直接落地的完整实操方案。基于此,本文聚焦零基础落地需求,系统性讲解redis_exporter + Prometheus监控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
解压该文件:
tar -zxvf redis_exporter-v0.21.2.linux-amd64.tar.gz
解压后启动,启动命令:
- 如果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
启动后浏览器通过如下url可查看redis_exporter监控到的数据
http://服务器ip:9121/metrics
进入这个目录,使用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
启动设置服务:
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
3.安装prometheus
通过以下命令创建一个用于存放Prometheus的目录 /app:
mkdir /app
进入到/app目录下:
cd /app
从prometheus官网下载压缩文件:https://prometheus.io/download/
下载适用于Linux系统的文件。
使用的是MobaXterm_Personal,这是一种功能强大的终端工具,常用于远程连接Linux服务器。
进入/app下面。
进入后点击这个“上传按钮”,上传下载好的文件。
使用命令查看,我这里显示已经上传成功。
ls
给这个文件解压缩:
tar -xzvf prometheus-3.5.0.linux-amd64.tar.gz
将解压好的文件夹改一个名字,并删除原有的未解压文件(可以不删):
mv prometheus-3.5.0.linux-amd64 prometheus
rm -rf prometheus-3.5.0.linux-amd64.tar.gz
进入解压好并且改过名的prometheus目录下,查看它的版本。返回版本号代表安装成功!
cd /app/prometheus
./prometheus --version
创建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
启动设置服务:
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
ip+端口就可以进入prometheus啦:
ip:9200
4.配置prometheus监控redis_exporter
找到prometheus的配置文件,编辑添加如下内容:
vi prometheus.yml
- targets: ["localhost:9121"]
labels:
app: "redis_exporter"
重启prometheus服务:
systemctl restart prometheus
使用浏览器Ip+9090打开promethues的页面:
我们可以看到成功的检测到了redis_exporter服务啦!
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."
编辑为7.yml,接下来配置prometheus告警:
进入prometheus配置文件:
找到prometheus的配置文件,编辑添加如下内容:
vi prometheus.yml
rule_files:
- "/app/prometheus/7.yml"
重启prometheus服务:
systemctl restart prometheus
使用浏览器Ip+9090打开promethues的页面:
可以看到,我们设置好的告警就出来啦!
那么问题来了,倘若我想监控朋友的redis,但是我们不在一个局域网,怎么办?别急cpolar来帮助你!
6.安装cpolar内网穿透工具
cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。
❤️以下是安装cpolar步骤:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh
安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
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服务,从而抓取系统指标。
- 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、配置Prometheus抓取指标,到定义关键告警规则并集成Alertmanager的全过程。现在,你的Redis实例不再是一个“黑盒”——内存使用、连接数、主从状态等核心指标尽在掌握,异常情况也能第一时间通知到你。
监控不是终点,而是稳定运维的起点。有了这套轻量却强大的可观测性基础,你可以进一步扩展:
- 添加Grafana仪表盘实现可视化;
- 结合业务指标做关联分析;
- 在Kubernetes环境中自动化部署整套监控栈。
技术的价值在于落地。愿你从此告别“盲人摸象”式的 Redis 运维,真正实现可观测、可预警、可信赖的缓存服务管理。
监控一小步,稳定性一大步。现在,就去给你的 Redis 装上“眼睛”吧!
感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站











































