首页 > 解决方案 > 带有多个表达式的警报

问题描述

我正在考虑如何根据延迟定义警报的概念。本质上,我需要将它用于黑盒出口商警报。根据响应时间,我不会有警报说明连接的当前状态。

good connection
slow connection
no connection

有没有办法定义一个规则,该规则将评估超过 1 个表达式并根据触发的表达式发出带有特定摘要和标签的警报?

标签: prometheusprometheus-alertmanagerprometheus-blackbox-exporter

解决方案


答案是“不”而不是“是”。注释是静态的,您在其中写入的任何内容都将存在于每个触发器中。但是,您可以在注释中执行查询,但我想把任何逻辑带到那里都是矫枉过正的。为了向您展示复杂性,请考虑以下注释:

# get error codes that occurred during last 5 minutes in the firing service
error_codes: >-
  Error code(s): {{ range printf `sum(increase(request_duration_seconds_count{status=~"5..",hostname="%s",service="%s"}[5m])) by (status) > 0` .Labels.hostname .Labels.service | query | sortByLabel "status" }}{{ .Labels.status }} {{ end }}

标签的情况有些相同。你在 key 下的 alert 中写的那些标签labels:是静态的。但是你可以通过加入、重写、添加新的等方式来弄乱警报表达式中的标签。就像注释一样,这会增加很多不合理的复杂性,这会让你不确定你是否真的得到了警报或者是否有错误会在某些情况下让你失望。

我的建议是保持简单,愚蠢。发出多个警报,但让它们易于理解、自定义和修复。


推荐阅读