这是《Redis 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 没有监控的 Redis 就是一颗定时炸弹。本章建立覆盖可用性、内存、性能、持久化、复制、客户端与业务的指标体系。
21.1 监控分层
业务层:命中率、降级次数、锁失败、库存失败
应用层:连接池、命令耗时、异常、序列化
Redis层:QPS、内存、慢查询、淘汰、持久化
高可用层:主从状态、哨兵、Cluster 拓扑
系统层:CPU、内存、磁盘、网络、进程
只监控 Redis 进程存活是不够的,缓存命中率下降本身就是重大业务风险。
21.2 核心指标
可用性
| 指标 | 获取方式 | 告警 |
|---|---|---|
ping |
PING |
连续失败 P0 |
connected_clients |
INFO clients |
异常突增 |
blocked_clients |
INFO clients |
>0 持续 |
rejected_connections |
INFO stats |
>0 |
内存
| 指标 | 说明 |
|---|---|
used_memory |
Redis 数据内存 |
used_memory_rss |
OS 驻留内存 |
maxmemory |
上限 |
mem_fragmentation_ratio |
碎片率 |
evicted_keys |
淘汰 key 数 |
expired_keys |
过期 key 数 |
建议告警:
used_memory / maxmemory > 80% 警告
used_memory / maxmemory > 90% 严重
evicted_keys 突增
碎片率 > 1.5 持续
性能
| 指标 | 说明 |
|---|---|
instantaneous_ops_per_sec |
当前 QPS |
slowlog_len |
慢查询条数 |
| 慢查询条目 | 命令与耗时 |
latency_percentiles_usec |
命令延迟分位(新版本) |
total_commands_processed |
累计命令 |
latest_fork_usec |
最近 fork 耗时 |
持久化
| 指标 | 说明 |
|---|---|
rdb_bgsave_in_progress |
RDB 进行中 |
rdb_last_save_time |
上次成功保存 |
rdb_last_bgsave_status |
上次结果 |
aof_enabled |
是否开启 AOF |
aof_last_write_status |
AOF 写状态 |
aof_delayed_fsync |
fsync 延迟次数 |
aof_current_size |
AOF 大小 |
复制与高可用
主节点:
role
connected_slaves
master_repl_offset
slaveN offset
repl_backlog_size
从节点:
master_link_status
master_last_io_seconds_ago
slave_read_repl_offset
master_repl_offset
Cluster:
cluster_state
cluster_slots_assigned / ok / fail / pfail
cluster_known_nodes
cluster_size
21.3 业务指标
缓存:
cache_request_total
cache_hit_total
cache_miss_total
cache_hit_ratio
cache_fallback_db_total
cache_rebuild_duration
cache_error_total
锁:
lock_acquire_total
lock_acquire_failure_total
lock_wait_duration
lock_hold_duration
lock_release_failure_total
队列:
queue_length
enqueue_total
dequeue_total
pending_total
dead_letter_total
命中率下降往往比 Redis CPU 更早暴露问题。
21.4 采集方式
redis-cli 定时采集
while true; do
redis-cli INFO memory | grep used_memory
sleep 10
done
适合临时排查,不适合生产完整监控。
Prometheus redis_exporter
scrape_configs:
- job_name: redis
static_configs:
- targets:
- redis-exporter:9121
redis-exporter 示例参数:
redis_exporter \
--redis.addr=redis://redis:6379 \
--redis.password=xxx
Grafana 面板
推荐至少四块:
- 可用性与连接;
- 内存与淘汰;
- QPS/延迟/慢查询;
- 复制/哨兵/Cluster。
再加一块业务面板:命中率、回源 DB、降级、锁失败。
21.5 日志采集
Redis 服务端日志:
慢查询
RDB/AOF 错误
复制断开
OOM
主从切换
Cluster 槽迁移
客户端日志:
连接超时
命令超时
重试
序列化失败
池耗尽
MOVED/ASK
建议统一 trace_id + key 前缀(不要打完整敏感 value)。
21.6 告警分级
| 级别 | 条件示例 |
|---|---|
| P0 | PING 失败;Cluster state fail;主从全部不可用;写入持续失败 |
| P1 | 内存 >90%;慢查询持续增加;复制断开;AOF 写失败;命中率骤降 |
| P2 | 内存 >80%;碎片率高;单从节点延迟增长;连接数异常 |
| 提醒 | 淘汰增长、大 key 数量、配置变更、备份失败 |
告警必须带 runbook:
现象
影响
确认命令
应急动作
升级路径
后续修复
21.7 巡检脚本示例
#!/usr/bin/env bash
REDIS="redis-cli -h redis -a $PASS"
echo "== ping =="
$REDIS ping
echo "== memory =="
$REDIS INFO memory | grep -E \
'used_memory_human|maxmemory_human|mem_fragmentation_ratio'
echo "== stats =="
$REDIS INFO stats | grep -E \
'instantaneous_ops_per_sec|evicted_keys|rejected_connections'
echo "== slowlog =="
$REDIS SLOWLOG GET 5
echo "== replication =="
$REDIS INFO replication | grep -E \
'role:|connected_slaves:|master_link_status:'
本章小结
- 监控覆盖业务、应用、Redis、高可用、系统五层;
- 内存、慢查询、复制、AOF、命中率是核心生命线;
- 业务命中率与回源 DB 能提前发现缓存失效;
- 告警分级并配套 runbook;
- Grafana 至少包含可用性、内存、性能、高可用、业务五块面板。
思考题
- Redis CPU 正常但接口变慢,应该看哪些客户端指标?
evicted_keys增长一定是问题吗?如何结合数据类型判断?- 如果只能保留 5 个 Redis 指标,你选什么?