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:
- Redis Exporter:作为代理周期性执行
INFO指标并转化为 Prometheus 格式。 - Prometheus:拉取并存储时序指标。
- Grafana Dashboard:配置图形化面板。
核心监控项:
- Uptime:运行时间。
- Connections:连接总数。
- Hits/Misses:缓存命中率(衡量缓存效率)。
- Commands per second:每秒处理命令数。
- Network Traffic:网络上下行吞吐。
故障排查套路
- 命令慢:搜
SLOWLOG。 - 连接满:看
INFO clients与maxclients配置。 - 内存满:看
INFO memory碎片率,检查是否有Big Key。 - CPU 高:如果是单核满,检查是否在跑
KEYS *或大范围HGETALL。 - 延迟高:检查
LATENCY或网络丢包。
监控不是目的,能在故障发生前预警才是关键。