【发布时间】:2022-01-17 22:14:15
【问题描述】:
我想配置一个 prometheus 警报,以便在现有指标出现新标签值时触发。
示例:名为 my_metric 的指标有一个名为 sv 的标签。当my_metric{sv="john"} 从“不存在”变为“存在”或“有价值”时,它会触发警报。但是,我事先不知道新值“john”会是什么。
这可能吗?表达式会是什么样子?
【问题讨论】:
标签: prometheus
我想配置一个 prometheus 警报,以便在现有指标出现新标签值时触发。
示例:名为 my_metric 的指标有一个名为 sv 的标签。当my_metric{sv="john"} 从“不存在”变为“存在”或“有价值”时,它会触发警报。但是,我事先不知道新值“john”会是什么。
这可能吗?表达式会是什么样子?
【问题讨论】:
标签: prometheus
一般来说,查询应该是这样的:
my_metric unless my_metric offset 10m
简单地说,上面给出了所有my_metric 时间序列,除了那些在10m 之前存在的:
unless 从输出时间序列中移除具有相同标签集的;offset 10m 将最后一个 my_metric 的评估时间从“现在”更改为 10m(或其他时间间隔)之前。在您的任务上下文中,这还将定义警报在自动解决之前触发多长时间。例子:
# my_metric 10 minutes ago
my_metric{foo="bar"} 1.0
# my_metric now
my_metric{foo="bar"} 1.0
my_metric{foo="baz"} 1.0
# query result:
my_metric{foo="baz"} 1.0
现在,在上面的基本表单中,您将收到任何新标签集的警报。如果您想观察某些特定标签的出现,请添加一些聚合:
avg by(label1, label2) (my_metric) unless avg by(label1, label2) (my_metric) offset 10m
将label1, label2两边替换为对您的情况有意义的标签名称。您还可以使用其他聚合函数(min()、max()、sum() 等)代替 avg()。
【讨论】: