Prometheus如何计算Kafka死信队列5分钟内10%增长率的告警规则
正确PromQL写法及说明
核心查询语句
按照你给出的涨幅公式,直接使用offset修饰符获取5分钟前的历史值计算即可,写法如下:
( count by(topic) (kafka_burrow_topic_partition_offset{topic=~".+__deadletter__.+my-subscription-name.+"}) - count by(topic) (kafka_burrow_topic_partition_offset{topic=~".+__deadletter__.+my-subscription-name.+"}) offset 5m ) / abs(count by(topic) (kafka_burrow_topic_partition_offset{topic=~".+__deadletter__.+my-subscription-name.+"}) offset 5m > 0) * 100 >= 10
说明
- 你之前使用的
increase函数是针对Counter类型指标设计的,会自动做增量修正,不适用于你当前这种统计分区offset总数的Gauge类场景,且原写法没有匹配你指定的订阅名称,所以无法得到正确结果 - 语句中加入
> 0是为了过滤5分钟前死信数量为0的情况,避免出现除零错误 - 最后的
>= 10对应涨幅达到10%的触发条件
完整告警规则示例
可以直接放到你的Prometheus告警规则配置中:
groups: - name: kafka_deadletter_alerts rules: - alert: KafkaDeadletterIncreaseOver10Percent expr: | ( count by(topic) (kafka_burrow_topic_partition_offset{topic=~".+__deadletter__.+my-subscription-name.+"}) - count by(topic) (kafka_burrow_topic_partition_offset{topic=~".+__deadletter__.+my-subscription-name.+"}) offset 5m ) / abs(count by(topic) (kafka_burrow_topic_partition_offset{topic=~".+__deadletter__.+my-subscription-name.+"}) offset 5m > 0) * 100 >= 10 for: 1m labels: severity: warning annotations: summary: "死信主题 {{ $labels.topic }} 5分钟涨幅超过10%" description: "当前涨幅为 {{ $value | printf \"%.2f\" }}%,请及时排查消费异常问题"
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

