Skip to content

监控告警 ​

监控是运维的「眼睛」。完善的监控体系能在故障发生前预警,在故障发生后提供定位依据。本章讲解监控维度、关键指标与告警阈值。

每个告警都应绑定正常基线、触发条件、负责人、处理步骤和升级路径。示例阈值只用于说明结构,生产阈值必须来自业务 SLO、压测安全水位和历史分布。

1. 监控架构 ​

Redis 监控从三个维度构建:

维度内容工具
服务端CPU、内存、网络、磁盘系统监控(Prometheus node_exporter)
应用端QPS、延迟、内存、连接、命中率redis_exporter / INFO 采集
联合分析服务端与应用端数据交叉定位Grafana 看板
txt
服务端(OS)     应用端(Redis)      联合分析
CPU / 内存    →  QPS / 延迟      →  定位根因
网络 / 磁盘   →  内存 / 命中率    →  关联证据

2. 关键指标详解 ​

2.1 吞吐量 ​

bash
INFO stats
# instantaneous_ops_per_sec:15000   # 当前 QPS
# total_commands_processed:123456789 # 累计处理命令数

2.2 延迟 ​

bash
# 持续发送 PING,测试网络和服务端往返延迟
redis-cli --latency
# min: 0, max: 3, avg: 1 (milliseconds)

# 延迟历史
redis-cli --latency-history
# 1712500000 0 2 1  ← 时间戳 min max avg

# 合成 PING 的延迟分布,不代表业务命令分位数
redis-cli --latency-dist

2.3 内存 ​

bash
INFO memory
# used_memory:1073741824          # Redis 分配的内存
# used_memory_rss:1288490188      # 操作系统分配的物理内存
# used_memory_peak:2147483648     # 内存峰值
# used_memory_peak_perc:50.00%   # 当前占峰值的比例
# used_memory_overhead:104857600  # 管理开销(元数据、缓冲区等)
# used_memory_dataset:968884224   # 数据实际占用
# mem_fragmentation_ratio:1.20    # 碎片率
# mem_allocator:jemalloc-5.3.0    # 内存分配器

2.4 命中率 ​

bash
INFO stats
# keyspace_hits:800000
# keyspace_misses:200000
# 命中率 = 800000 / (800000 + 200000) = 80%
命中率评估可能原因
> 90%缓存场景常见良好区间仍应与业务命中目标比较
70%~90%需要结合业务判断检查 TTL、预热和数据访问模式
< 70%缓存收益可能不足检查穿透、TTL、热点和布隆过滤器适用性

2.5 连接数 ​

bash
INFO clients
# connected_clients:500          # 当前连接数
# blocked_clients:10             # 阻塞的客户端(BLPOP 等)
# tracking_clients:0             # 使用 tracking 的客户端
# maxclients:10000               # 最大连接数

2.6 复制延迟 ​

bash
INFO replication
# role:master
# slave0:ip=10.0.0.2,port=6379,state=online,offset=123456789,lag=0
# slave1:ip=10.0.0.3,port=6379,state=online,offset=123456000,lag=1

# lag=1 表示延迟 1 秒

2.7 持久化状态 ​

bash
INFO persistence
# rdb_last_save_time:1712500000       # 上次 RDB 时间
# rdb_last_bgsave_status:ok           # 上次 BGSAVE 状态
# rdb_last_bgsave_time_sec:2          # 上次 BGSAVE 耗时
# aof_current_size:104857600          # 当前 AOF 大小
# aof_rewrite_in_progress:0           # 是否正在重写
# aof_last_bgrewrite_status:ok        # 上次重写状态

3. 告警阈值 ​

指标告警阈值(参考)说明
内存使用率> 80%接近上限,需扩容或淘汰
碎片率> 1.5碎片较多,考虑整理
慢查询数量持续增长存在慢命令
fork 耗时> 1sfork 停顿明显
连接数> 80% maxclients连接接近上限
命中率低于业务基线缓存收益下降
复制延迟超过业务可接受的读旧窗口检查复制状态和读写路由
QPS超过压测安全水位或持续异常增长容量接近瓶颈

阈值需结合业务实际情况调整。告警的黄金法则是「宁可在故障前预警,不要在故障后才知道」。

4. 监控方案选型 ​

方案优势劣势适用场景
Prometheus + Grafana开源、灵活、社区丰富需要部署维护中小团队首选
云厂商监控开箱即用、无需运维定制性差使用云 Redis
CacheCloud一站式管理、多实例搜狐开源,社区较小大规模私有部署
自建采集完全定制开发成本高有特殊需求

4.1 Prometheus + Grafana 快速搭建 ​

yaml
# docker-compose.yml
services:
  redis-exporter:
    image: oliver006/redis_exporter
    environment:
      REDIS_ADDR: redis://10.0.0.1:6379
    ports:
      - "9121:9121"

  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
yaml
# prometheus.yml
scrape_configs:
  - job_name: 'redis'
    static_configs:
      - targets: ['redis-exporter:9121']

Grafana 可导入与所用 redis_exporter 版本匹配的 Redis Dashboard。导入前核对看板版本、指标名和数据源,并记录看板来源;不要仅凭固定 Dashboard ID 假定兼容。

5. 日常巡检 ​

建议每天执行一次巡检:

bash
# 1. 内存状态(Redis 不提供 swap 字段)
INFO memory | grep -E "used_memory|fragmentation"
grep -E "SwapTotal|SwapFree" /proc/meminfo

# 2. 慢查询
SLOWLOG GET 5

# 3. 连接数
INFO clients | grep connected_clients

# 4. 命中率
INFO stats | grep keyspace

# 5. 复制状态
INFO replication | grep -E "role|slave|lag"

# 6. 持久化状态
INFO persistence | grep -E "rdb_last|aof_current"

Released under the MIT License.