文章探讨了在阿里云上将Redis从4.0升级到5.0后,命中率监控出现的异常报警问题。用户发现自行计算的命中率远高于监控显示的40%左右,原因在于阿里云云监控的命中率计算周期为5秒,若该区间内无QPS,则命中率被计为0%,而非以往的100%。这种计算逻辑导致命中率指标波动剧烈,难以设置有效的监控阈值,尤其是在业务QPS不稳定的情况下,白天和夜晚的命中率差异巨大,给监控带来了实际操作的困难。
🚀 **Redis命中率计算方式变更:** 在阿里云上,将Redis从4.0升级到5.0后,云监控的命中率计算周期由原先的以QPS为基础,变更为最小5秒的区间统计。这意味着,如果在一个5秒的时间段内Redis没有接收到任何查询请求(QPS为0),该时间段的命中率将被视为0%,而非之前无QPS情况下的100%。
📊 **监控报警与实际不符:** 用户自行根据公式“命中率=Key命中数÷(Key命中数+Key未命中数)”计算出的命中率远高于监控显示的40%左右,推测实际命中率应在90%以上。这种差异源于阿里云监控计算逻辑的调整,导致了监控报警的误报或漏报。
⚠️ **监控阈值设置困境:** 这种5秒钟内无QPS即命中率为0%的计算方式,使得命中率指标在实际应用中波动极大。业务高峰期可能显示较高命中率,而低谷期(如夜晚)则可能跌至极低水平。这给用户设置一个既能覆盖低谷期报警,又不至于在高峰期频繁误报的监控阈值带来了巨大挑战,使得有效的性能监控难以实现。
💡 **用户期望与实际逻辑的冲突:** 用户认为,当Redis在一段时间内没有QPS时,不应将其命中率强制设为0%,而是应保持其之前的有效命中率或采用更平滑的计算方式。现有的逻辑使得命中率指标在非连续QPS场景下变得不直观且难以管理。
区间为 5s ,00:00 的 hit 与 miss 值与 00:05 的值都相等,也就是说 5s 里 redis 都没有 qps 。那此时的命中率应该是多少呢?
-----
在阿里云上,从 Redis 开源版 4.0 升级至 5.0 后,命中率监控持续报警说命中率只有 40%左右。通过 info 查看,自己按照 命中率=Key 命中数÷( Key 命中数+Key 未命中数)计算,命中率应该在 90%以上,遂提交工单询问监控命中率计算问题。经过 3 个半小时的内部讨论给了如下回复(忽略标题内容)。

阿里云命中率指标的获取最小周期是 5s ,也就是 5s 内都没有 QPS 的时候,这 5s 的命中率就为 0 (以前为 100%)。除非每秒都有 QPS ,那在阿里云云监控中,那刻的命中率才会显示为 100%。下图就是为 0 的情况。
越看这个逻辑越别扭。像上图这种正常情况下,命中率指标能覆盖 0%-100%,这还咋设置监控呢。
我们业务无法保障每秒都有 qps ,按照现在的算法,1 分钟的区间,晚上的命中率能到 10%,白天可能到 80%,监控命中率完全无法设置阈值,如果设置过低,白天的 key miss 可能就无法触发报警,设置略高,晚上报警不断。。。