如何以简化的方式编写普罗米修斯复杂警报规则?
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_names 和 service_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_names 和 service_names
的所有不同组合生成所需的规则【讨论】:
每个方法名称的标签“le”更改 是否可以借助录制规则生成警报? 不完全是,由于按工作的总和,它会将它们组合在一起。您还需要在 by 子句中添加方法名称和服务名称才能使其正常工作 - 在任何情况下都建议您这样做,以便您将它们作为警报中的标签。以上是关于如何以简化的方式编写普罗米修斯复杂警报规则?的主要内容,如果未能解决你的问题,请参考以下文章