第07期:故障排查-为什么发出的告警为已解决?( 二 )


其次 , Ruler 提供了 3 个 metric 的值来监控缓冲队列的运行情况:

  • thanos_alert_queue_alerts_dropped_total
  • thanos_alert_queue_alerts_pushed_total
  • thanos_alert_queue_alerts_popped_total
通过观察 thanos_alert_queue_alerts_dropped_total 的值 , 看到存在告警丢失的总数 , 也能佐证了缓冲队列在某些时刻存在已满的情况 。
解决通过以上的分析 , 我们基本确定了问题的根源:Ruler 组件内置的缓冲队列堆积造成了告警发送的延迟 。 针对这个问题 , 我们选择调整队列的 maxBatchSize 值 。 下面介绍一下这个值如何设置的思路 。
由于每计算一次告警规则就会尝试推送一次缓冲队列 , 我们通过估计一个告警数量的最大值 , 得到 maxBatchSize 可以设置的最小值 。 假设你的业务系统需要监控的实体数量分别为 x1、x2、x3、...、xn , 实体上的告警规则数量分别有 y1、y2、y3、...、yn , 那么一次能产生的告警数量最多是(x1 * y2 + x2 * y2 + x3 * y3 + ... + xn * yn) , 最多推送(y1 + y2 + y3 + ... + yn)次 , 所以要使缓冲队列不堆积 , maxBatchSize 应该满足:
maxBatchSize >= (x1 * y2 + x2 * y2 + x3 * y3 + ... + xn * yn) / (y1 + y2 + y3 + ... + yn) , 假设 x = max(x1,x2, ...,xn), 将不等式右边适当放大后为 x , 即 maxBatchSize 的最小值为 x 。 也就是说 , 可以将 maxBatchSize 设置为系统中数量最大的那一类监控实体 , 对于 DMP 平台 , 一般来说是 MySQL 实例 。
注意事项上面的计算过程只是提供一个参考思路 , 如果最终计算出该值过大 , 很有可能对 AlertManager 造成压力 , 因而失去缓冲队列的作用 , 所以还是需要结合实际情况 , 具体分析 。
因为 DMP 将 Ruler 集成到了自己的组件中 , 所以可以比较方便地对这个值进行修改 。 如果是依照官方文档的介绍使用的 Ruler 组件 , 那么需要对源码文件进行定制化修改 。
源码文件:
)
参考资料1.
2.
相关内容方面的知识 , 大家还有什么疑问或者想知道的吗?赶紧留言告诉小编吧!
第07期:故障排查-为什么发出的告警为已解决?文章插图