目录
Prometheus 监控 Redis
一、架构说明
Redis 监控架构核心由 Redis 实例、redis_exporter(Redis 指标采集器)、Consul(服务发现)、Prometheus(指标存储与查询)、Grafana(可视化展示)五部分组成:
- redis_exporter 部署在 Redis 节点(或可访问 Redis 的节点),通过 Redis 协议采集指标并暴露 HTTP 接口(默认 9121 端口);
- Redis 服务注册到 Consul,实现服务自动发现;
- Prometheus 通过 Consul 服务发现机制,自动抓取所有 Redis 实例的 exporter 指标;
- Grafana 对接 Prometheus,通过预制面板可视化 Redis 指标,并配置告警规则。
二、前置条件
- 已部署 Redis(单机/集群/哨兵模式均可),且 Redis 实例可被 redis_exporter 访问;
- 已部署 Consul 集群(或单节点),且 Prometheus 可访问 Consul;
- 已部署 Prometheus 服务,且配置文件可修改、服务可重启;
- 已部署 Grafana 服务,且可访问 Prometheus 数据源;
- 服务器具备基础的 Linux 操作权限(如创建用户、配置系统服务、执行 wget/curl 等);
- Redis 若开启密码认证,需提前准备认证密码;若为集群模式,需确保集群节点互通。
三、步骤 1:部署 redis_exporter(Redis 指标采集)
3.1 下载并安装 redis_exporter
推荐下载稳定版(以 v1.50.0 为例,可根据实际需求替换版本号):
# 创建安装目录
mkdir -p /data/monitor
cd /data/monitor
# 下载二进制包(适配 Linux amd64 架构)
wget https://github.com/oliver006/redis_exporter/releases/download/v1.80.0/redis_exporter-v1.80.0.linux-amd64.tar.gz
# 解压并移动可执行文件
tar -zxvf redis_exporter-v1.80.0.linux-amd64.tar.gz
mv redis_exporter-v1.80.0.linux-amd64 redis_exporter
# 验证安装(输出版本信息则成功)
redis_exporter --version
3.2 配置 Redis 授权(供 exporter 连接)
场景 1:Redis 无密码(仅测试环境)
无需额外授权,确保 redis_exporter 所在节点可访问 Redis 的 6379 端口即可。
场景 2:Redis 有密码认证
若 Redis 开启密码,无需创建专用用户(Redis 无用户体系,仅密码认证),只需确保 exporter 能通过密码连接:
# 登录 Redis 验证密码有效性(示例)
redis-cli -h <Redis_IP> -p 6379 -a <Redis_Password> ping
# 输出 PONG 则密码有效
场景 3:Redis 集群/哨兵模式
需确保 exporter 能访问集群所有节点(或哨兵节点),密码需与集群统一认证密码一致。
3.3 系统服务方式启动 redis exporter
创建 systemd 服务文件,确保 exporter 开机自启:
vim /etc/systemd/system/redis_exporter.service
服务文件内容:
[Unit]
Description=Redis Exporter for Prometheus
After=network.target
[Service]
User=root
Group=root
Type=simple
# 指定配置文件启动
ExecStart=/data/monitor/redis_exporter/redis_exporter --redis.addr redis://127.0.0.1:30017 --redis.password "trRxHw8Ugd" --namespace redis
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动服务
systemctl start redis_exporter
# 设置开机自启
systemctl enable redis_exporter
# 验证状态(输出 active (running) 则成功)
systemctl status redis_exporter
# 验证指标暴露(访问 9121 端口,输出指标则成功)
curl http://[IP]:9121/metrics

四、步骤 2:Redis 服务注册到 Consul
方式 1:手动注册(通过 Consul HTTP API)
适用于临时测试或少量实例,通过 curl 调用 Consul API 注册:
# 注册 Redis 服务(替换以下参数)
curl http://192.168.37.40:8500/v1/agent/service/register -X PUT -i -H "Content-Type:application/json" -H "X-Consul-Token: f5cc7d96-ba0f-0501-4252-903e059514bb" -d '{
"ID": "redis-192.168.37.21:30017",
"Name": "redis-exporter",
"Tags": [
"redis-exporter",
"dev"
],
"Address": "192.168.37.21",
"Port": 9121,
"EnableTagOverride": false,
"Check": {
"DeregisterCriticalServiceAfter": "90m",
"HTTP": "http://192.168.37.21:9121/metrics",
"Interval": "10s",
"timeout": "2s"
}
}'
验证服务注册结果
访问 Consul Web UI(http://<Consul_IP>:8500),在「Services」页面查看 redis 服务状态为「Passing」;或通过 API 验证:
curl http://<Consul_IP>:8500/v1/catalog/service/redis
# 输出包含 Redis 服务信息则注册成功

五、步骤 3:Prometheus 配置 Consul 服务发现
5.1 编辑 Prometheus 配置文件(prometheus.yml)
修改 Prometheus 主配置文件,添加 Consul 服务发现配置:
vim /etc/prometheus/prometheus.yml
在 scrape_configs 节点下添加 Redis 采集配置:
scrape_configs:
# 原有配置(如 Prometheus 自身监控)保留
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# 新增 Redis 采集配置(通过 Consul 发现)
- job_name: "redis-exporter"
consul_sd_configs:
- server: "192.168.37.40:8500" # Consul 地址
token: f5cc7d96-ba0f-0501-4252-903e059514bb
services: ["redis-exporter"] # 匹配 Consul 中注册的服务名称
relabel_configs:
# 添加自定义标签,便于区分实例
- source_labels: ["__meta_consul_service_id"]
target_label: "redis_instance"
5.2 验证 Prometheus 配置并重启
# 验证配置文件语法(无报错则有效)
promtool check config /etc/prometheus/prometheus.yml
# 重启 Prometheus 服务
systemctl restart prometheus
# 验证服务状态
systemctl status prometheus
5.3 确认服务发现结果
访问 Prometheus Web UI(http://<Prometheus_IP>:9090):
- 进入「Status」→「Targets」页面;
- 找到
redisjob,查看目标列表中是否包含 Redis 实例的 exporter 地址,且状态为「UP」。

六、步骤 4:可视化监控(Grafana)
6.1 导入 Redis 监控面板
- 登录 Grafana Web UI(默认 http://<Grafana_IP>:3000,账号密码 admin/admin);
- 进入「Dashboards」→「Import」;
- 输入官方推荐的 Redis 面板 ID:
11835(Redis Dashboard for Prometheus),或763(基础 Redis 监控); - 选择已配置的 Prometheus 数据源,点击「Import」完成导入;
- 导入后即可看到 Redis 各项指标的可视化图表(如内存使用、连接数、命中率、命令执行量等)。

七、Redis 监控指标
八、告警
告警规则(Prometheus 配置)
在 Prometheus 配置目录创建 Redis 告警规则文件 redis_alerts.yml:
groups:
- name: redis_alerts
rules:
# Redis-exporter 实例不可以
- alert: RedisExporterDown # 告警名称
expr: |
# 核心表达式:检测 Consul 发现的 Redis-exporter 实例状态为 DOWN
up{job="redis-exporter"} == 0
# 或备选表达式(不依赖 Consul,直接检测指标):
# absent(redis_uptime_in_seconds)
for: 30s # 持续30秒DOWN才触发(避免抖动)
labels:
severity: critical # 告警级别
service: redis
annotations:
summary: "Redis-exporter 进程停止运行"
description: "实例 {{ $labels.instance }} 的 Redis-exporter 已停止(持续30秒),请立即检查!"
# Redis 实例不可用
- alert: RedisDown
expr: redis_up == 0
for: 20s
labels:
severity: critical
annotations:
summary: "Redis 实例不可用 ({{ $labels.instance }})"
description: "Redis 实例已下线超过 10 秒,请检查实例状态。"
# 当前连接数超过最大连接数的80%
- alert: RedisConnectionsHigh
expr: |
redis_connected_clients > (redis_max_clients * 0.8)
for: 1m # 持续1分钟触发,过滤瞬时峰值
labels:
severity: warning
service: redis
alert_type: connection_limit
annotations:
summary: "Redis连接数接近上限 ({{ $labels.instance }})"
description: |
"Redis实例 {{ $labels.instance }} 当前连接数 {{ $value | humanize }}
已超过最大连接数的80%"
# 连接数5分钟内增长超过200%
- alert: RedisConnectionsRapidGrowth
expr: |
# 核心逻辑:当前值 / 5分钟前的值 > 3(增长200%)
redis_connected_clients / (redis_connected_clients offset 5m) > 3
# 保护条件:排除当前连接数为0或5分钟前连接数为0的情况,避免除零错误
and redis_connected_clients > 0
and (redis_connected_clients offset 5m) > 0
for: 2m # 持续2分钟触发,过滤短期抖动
labels:
severity: critical
service: redis
alert_type: connection_growth
annotations:
summary: "Redis连接数5分钟内激增 ({{ $labels.instance }})"
description: |
"Redis实例 {{ $labels.instance }} 连接数5分钟内增长超过200%。"
# 内存使用率高
- alert: RedisMemoryUsageHigh # 告警规则名称
expr: |
100 * (
redis_memory_used_bytes
/
(redis_memory_max_bytes > 0) # 排除max内存为0的情况,避免除零错误
) > 85 # 内存使用率阈值,可根据实际情况调整(建议85%-90%)
for: 3m # 持续5分钟超过阈值才触发告警,避免瞬时波动
labels:
severity: warning # 告警级别(warning/critical)
service: redis # 服务标签,便于分类
category: memory # 告警类别
annotations:
summary: "Redis 内存使用率过高 [{{ $labels.instance }}]" # 告警摘要
description: |
"Redis 实例 {{ $labels.instance }} 内存使用率超过 85% (当前值: {{ $value | humanize }})"
# 5. 慢查询数增加
- alert: RedisSlowQueriesIncreased
expr: increase(redis_slowlog_length[5m]) > 0
for: 5m
labels:
severity: warning
annotations:
summary: "Redis 慢查询数增加 ({{ $labels.instance }})"
description: "过去 5 分钟内新增慢查询 {{ $value }} 条,请检查慢查询日志。"
在 prometheus.yml 中引入告警规则文件:
rule_files:
- "redis_alerts.yml"
# 其他告警规则文件...
重启 Prometheus 使告警规则生效。
压测和告警验证
- 压测工具:使用
redis-benchmark模拟高并发访问,验证性能指标和告警:
# 模拟 100 并发,执行 10 万次 SET 命令
redis-benchmark -h <Redis_IP> -p 6379 -a <Redis_Password> -c 100 -n 100000 -d 1024
- 告警验证:
总结
- Redis 监控核心是通过
redis_exporter采集指标,结合 Consul 实现服务自动发现,Prometheus 存储指标,Grafana 可视化; - 必监控指标包括可用性(
redis_up)、内存使用率、缓存命中率、主从同步状态,需针对这些指标配置告警; - 不同部署模式(单机/集群/哨兵)需关注差异化指标,集群需重点监控
redis_cluster_state,哨兵需关注监控的主节点数。
9367

被折叠的 条评论
为什么被折叠?



