如何从零搭建Redis缓存监控大盘?

来源:搜索优化作者:白鲨头衔:草根站长
导读:本期聚焦于白鲨创作的《如何从零搭建Redis缓存监控大盘?》,敬请观看详情。Redis命中率突然下降到60%以下,但究竟是哪些key拖了后腿?单纯看内存使用率并不能回答这个问题。要真正看清缓存运行状态,必须把延迟、命中率、过期淘汰、连接数等指标整合到一个可视化大盘中。本文给出一种基于Prometheus、redis_exporter和Grafana的落地方案,先梳理需要采集的核心指标,再说明exporter的部署与多实例采集配置,随后展示PromQL查询和Grafana面板设计,最后补充告警规则与常见坑位。对已经出现偶发慢查询或内存抖动的系统,这个大盘能帮助快速定位是热key集中、连接堆积还是过期策略导致。整套流程不依赖商业监控产品,适合中小团队快速搭建。

搭建Redis缓存监控大盘之前,需要先回答一个基础问题:到底要监控哪些数据。如果只盯着内存使用率,等到缓存雪崩发生时才会发现命中率早就异常。一个可用的监控大盘至少覆盖命令统计、内存消耗、客户端连接、阻塞与延迟、过期与淘汰五个维度。

如何从零搭建Redis缓存监控大盘?

一、从业务视角拆解Redis监控指标

Redis自身提供的INFO命令包含丰富字段,但监控大盘不能将所有指标全部铺开。建议先关注与业务故障直接相关的指标。内存维度可以看used_memory、maxmemory以及内存碎片率mem_fragmentation_ratio。当碎片率长期大于1.5时,重启实例可能比优化配置更有效。命中率维度通过keyspace_hits和keyspace_misses计算,低于90%就需要关注是否存在大量穿透或缓存设计不合理。

连接与性能维度更偏向实时性。connected_clients可以反映客户端连接是否堆积,instantaneous_ops_per_sec用于观察命令执行峰值。延迟类指标不易直接从INFO获得,需要借助redis-cli的latency监控或者exporter采集的延迟分位数。最后是过期与淘汰,expired_keys和evicted_keys两个指标必须同时看,前者是正常过期,后者是被maxmemory策略强制删除,如果evicted_keys持续增长,说明内存配额已经吃紧。

  • 内存使用量与碎片率
  • 命中率与未命中次数
  • 已连接客户端数与每秒命令数
  • 阻塞客户端数
  • 过期键数与淘汰键数

二、使用redis_exporter采集多实例数据

在生产环境中,单个Redis exporter进程通常可以同时采集多个Redis实例,不需要每个实例单独部署一个exporter。部署时可以直接下载二进制文件,也可以使用容器方式运行。exporter的启动参数中可以指定多个Redis地址,中间用逗号分隔,密码不一致时可以使用单独的密码文件。

下面是一个启动示例,假设本机有两个Redis实例,端口分别是6379和6380,密码相同:

redis_exporter \
  -redis.addr=redis://127.0.0.1:6379,redis://127.0.0.1:6380 \
  -redis.password=yourpassword \
  -web.listen-address=:9121

启动后访问http://127.0.0.1:9121/metrics可以看到所有以redis_开头的指标。需要注意,旧版本redis_exporter对多实例的标签区分并不友好,建议使用新版本并开启-check-keys之类的参数进行健康检查。若实例地址中包含特殊字符,可改为redis://[user]:[password]@host:port的形式,避免密码明文出现在进程参数中。

三、用Prometheus抓取并计算核心指标

Prometheus通过静态配置或服务发现方式从exporter拉取数据。最简单的配置是在prometheus.yml中增加一个job,把exporter地址写入targets。如果exporter部署在业务机之外,还需要注意网络策略允许Prometheus访问9121端口。

scrape_configs:
  - job_name: 'redis'
    static_configs:
      - targets: ['10.0.0.12:9121']
        labels:
          env: 'production'
    scrape_interval: 15s

数据进入Prometheus后,可以用PromQL灵活计算比率和趋势。例如每秒命令执行量写作rate(redis_commands_processed_total[5m]),命中率写作100 * (redis_keyspace_hits_total / (redis_keyspace_hits_total + redis_keyspace_misses_total))。内存碎片率可直接使用redis_mem_fragmentation_ratio,它的值接近1表示内存分配连续,大于1.5则需要关注。

如果需要在多实例之间做聚合,可以使用sum by (instance) (...)或者avg by (env) (...)。但要注意,不要对命中率这类比率指标直接取平均值,应该先求和的分子分母再相除,否则会扭曲真实命中情况。延迟分位指标则需要关注Prometheus的histogram类型,通过histogram_quantile(0.99, rate(redis_latency_seconds_bucket[5m]))得到99分位延迟。

四、Grafana大盘布局与告警落地

Grafana负责将Prometheus中的指标组织成可视化面板。大盘一般按业务模块划分行,第一行放全局状态卡片,第二行放内存和命中率趋势图,第三行放连接数、命令速率和延迟分位图,底部可以放置慢查询或阻塞客户端等明细。为了减少重复配置,可以在Dashboard中定义变量,比如$instance,这样所有面板会自动根据下拉框切换实例。

面板类型的选择没有固定标准,但时间序列图适合看趋势,Stat卡片适合看当前值,Gauge适合看容量水位。内存使用率面板可以使用单值仪表盘,将used_memory / maxmemory * 100作为查询结果,同时把阈值颜色设置为70%和85%。命中率面板建议使用时间序列图,并与未命中数叠加展示,这样能直观看到命中率下降时未命中请求是否同步增加。

告警规则建议在Grafana中直接配置,便于与面板阈值联动。例如当内存使用率超过85%持续5分钟触发告警,当单个实例命中率低于80%持续10分钟触发告警。为了避免告警风暴,同一组实例可以只发一条汇总通知。还可以结合predict_linear函数预测内存增长趋势,提前一天发出容量预警。

Redis监控缓存监控监控大盘修改时间:2026-09-23 21:20:15

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0923/61053.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。