跳到主要内容

Redis 监控与故障排查

在生产环境中,没有监控的 Redis 是一枚定时炸弹。本节介绍如何实时掌控 Redis 的健康状况。

1. 核心监控命令 INFO

INFO 是 Redis 最权威的状态输出,包含了内存、连接、CPU 等 10 个分类。

# 获取所有监控信息
127.0.0.1:6379> INFO

# 只看内存
127.0.0.1:6379> INFO memory
# 重点指标:
# used_memory_human: 实际使用内存
# used_memory_rss: 操作系统分配给 Redis 的内存(包含碎片)
# mem_fragmentation_ratio: 碎片率 (建议 1.0~1.5 之间)

# 只看连接
127.0.0.1:6379> INFO clients
# 重点指标:
# connected_clients: 当前连接数
# blocked_clients: 处于阻塞状态的客户端数(如 BLPOP)

2. 慢查询日志 SLOWLOG

当 Redis 变慢时,首选工具就是 SLOWLOG

# 获取最新的 10 条慢查询
127.0.0.1:6379> SLOWLOG GET 10

# 获取日志当前长度
127.0.0.1:6379> SLOWLOG LEN

# 重置日志
127.0.0.1:6379> SLOWLOG RESET

配置建议

  • slowlog-log-slower-than 10000 (10 毫秒,默认)
  • slowlog-max-len 128 (日志容量)

3. 阻塞定位 MONITOR

[!CAUTION]
MONITOR 会消耗大量 CPU,仅用于非高负载环境的短时间调试。

它可以实时打印服务器接收到的所有请求,帮助定位哪个客户端在疯狂发请求。

127.0.0.1:6379> MONITOR
1727000000.123 [0 127.0.0.1:5432] "GET" "user:123"

4. 延迟追踪 LATENCY

Redis 提供了专门的延迟分析框架。

# 开启采样 (采样率 100ms)
CONFIG SET latency-monitor-threshold 100

# 查看延迟事件分类
LATENCY LATEST
# 查看故障热点图
LATENCY GRAPH command

5. 性能测试 redis-benchmark

内置压测工具,评估当前服务器能抗住多少 QPS。

# 测试 100 个并发连接,10 万次请求
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000

# 只测试特定的 SET/GET 命令
redis-benchmark -t set,get -q -n 100000

生产级监控方案 (Prometheus + Grafana)

对于中大型系统,建议使用 Redis Exporter

  1. Redis Exporter:作为代理周期性执行 INFO 指标并转化为 Prometheus 格式。
  2. Prometheus:拉取并存储时序指标。
  3. Grafana Dashboard:配置图形化面板。

核心监控项

  • Uptime:运行时间。
  • Connections:连接总数。
  • Hits/Misses:缓存命中率(衡量缓存效率)。
  • Commands per second:每秒处理命令数。
  • Network Traffic:网络上下行吞吐。

故障排查套路

  1. 命令慢:搜 SLOWLOG
  2. 连接满:看 INFO clientsmaxclients 配置。
  3. 内存满:看 INFO memory 碎片率,检查是否有 Big Key
  4. CPU 高:如果是单核满,检查是否在跑 KEYS * 或大范围 HGETALL
  5. 延迟高:检查 LATENCY 或网络丢包。

监控不是目的,能在故障发生前预警才是关键。