如何以简化的方式编写普罗米修斯复杂警报规则?

Posted

技术标签:

【中文标题】如何以简化的方式编写普罗米修斯复杂警报规则?【英文标题】:How can i write the prometheus complex alerting rule in simplified manner? 【发布时间】:2020-07-09 16:20:25 【问题描述】:

我的警报规则的表达式如下所示,我需要编写多达 20 条具有相同表达式的警报规则,但是方法名称和服务名称因规则而异,使我的 alert.yaml 文件丑陋,任何人都可以指定简化的编写方式这些类型的警报

表达式:

( sum(rate(grpc_server_handling_seconds_bucketendpoint="http",grpc_method="MethodName",grpc_service="ServiceName",grpc_type="unary",job="JobName",le="1",service="ServiceName"[15m])) by (job)+sum(rate(grpc_server_handling_seconds_bucketendpoint="http",grpc_method="MethodName",grpc_service="ServiceName",grpc_type="unary",job="JobName",le="5",service="ServiceName"[15m])) by (job) ) / 2 /  sum(rate(grpc_server_handling_seconds_countendpoint="http",grpc_method="MethodName",grpc_service="ServiceName",grpc_type="unary",job="JobNAme",service="ServiceName"[15m])) by (job) < 0.9

【问题讨论】:

【参考方案1】:

如果您想提醒所有 method_namesservice_names,您可以完全跳过在标签选择器中添加这些

(
  (
    sum by (job) (rate(grpc_server_handling_seconds_bucketendpoint="http",grpc_type="unary",job="JobName",le="1",service="ServiceName"[15m])) 
  +
    sum by (job) (rate(grpc_server_handling_seconds_bucketendpoint="http",grpc_type="unary",job="JobName",le="5",service="ServiceName"[15m]))
  ) / 2 
/  
 sum by (job)(rate(grpc_server_handling_seconds_countendpoint="http",grpc_type="unary",job="JobNAme",service="ServiceName"[15m]))
) < 0.9

否则,您可以使用诸如ytt 之类的模板工具来为 method_namesservice_names

的所有不同组合生成所需的规则

【讨论】:

每个方法名称的标签“le”更改 是否可以借助录制规则生成警报? 不完全是,由于按工作的总和,它会将它们组合在一起。您还需要在 by 子句中添加方法名称和服务名称才能使其正常工作 - 在任何情况下都建议您这样做,以便您将它们作为警报中的标签。

以上是关于如何以简化的方式编写普罗米修斯复杂警报规则?的主要内容,如果未能解决你的问题,请参考以下文章

如何从普罗米修斯警报中标记松弛通道中的用户

普罗米修斯警报中缺少标签

如何在特定时间打盹普罗米修斯警报

如何获取警报计数,在普罗米修斯上一周警报触发了多少次

如何在普罗米修斯中对具有高基数的指标发出警报

普罗米修斯中的警报管理器给出退出代码错误并忽略普罗米修斯中警报管理器的分配