内存指标的自动化采集要点
把 INFO 的内存指标接入监控,重点不在抓多少字段,而在标签与口径:每个实例要带上实例名、角色(主库还是从库)和版本号,数值进时间序列库,告警基于速率与持续时间而不是单点数值。
基本信息
| 数据来源 | INFO memory / stats / clients / replication / server |
|---|---|
| 必打标签 | instance、role、version |
| 采集频率 | 内存类指标分钟级够用,秒级对多数场景没有必要 |
| 告警口径 | 速率、持续时长、周期对比,不用单点数值 |
| 封装工具 | redis_exporter 一类采集器同样要保留角色标签 |
典型使用场景
- 多实例统一监控:用标签区分主从与集群角色,避免指标互相污染
- 容量趋势分析:靠时间序列看长期水位,而不是抓即时快照
- 告警降噪:把单点超阈值改成持续超阈值才触发
- 版本差异适配:字段随版本变化,采集脚本要做容错
- 故障复盘:把指标曲线与变更记录放在同一时间轴上对齐
关键字段采集
关键字段采集
redis-cli INFO memory | grep -E 'used_memory:|used_memory_rss|mem_fragmentation_ratio' # 内存主字段
redis-cli INFO stats | grep -E 'evicted_keys|expired_keys' # 活动类指标
redis-cli INFO clients | grep -E 'connected_clients' # 连接数
redis-cli INFO replication | grep -E '^role' # 角色标签来源
redis-cli INFO server | grep -E 'redis_version' # 版本标签来源
redis-cli INFO commandstats # 需要命令画像时单独采集字段口径与告警
| 字段 | 口径 | 告警建议 |
|---|---|---|
| used_memory | 分配器分配的数据内存 | 按 maxmemory 比例设多级水位 |
| used_memory_rss | 操作系统看到的常驻内存 | 容器场景按 cgroup 限额设阈值 |
| mem_fragmentation_ratio | rss 与 used_memory 的比值 | 持续高于经验值再介入 |
| evicted_keys | 累计淘汰键数 | 取差值做速率告警 |
| connected_clients | 当前连接数 | 结合 maxclients 设水位 |
采集脚本对字段缺失要容错:不同版本、不同编译选项会让 INFO 里出现的字段发生变化,硬编码位置或数量都会在升级时失效。
区分角色的采集很关键:从库的内存、碎片与复制相关缓冲表现与主库差异明显,混在一起分析容易得出错误结论。
采集失败要有可见性:解析报错、连接超时都应当产生独立告警,否则监控面板上表现为曲线平滑地掉到零,反而更危险。