如何为一小部分实例参数化 Prometheus 规则?

问题描述 投票:0回答:1

我需要为 Prometheus 创建一条规则,将某些指标的值与阈值进行比较。大多数实例的阈值是相同的,但有两个或三个实例不同。有没有一种简单可靠的方法来参数化规则?

可能是这样的:

- alert: HighValueAlert
  expr: my_metric > my_metric_threshold
  for: 5m

其中

my_metric_threshold
是一个“人工”指标,在某处定义,例如使用节点导出器文本文件收集器(或者可能使用我不知道的另一种方法):

my_metric_threshold{instance="special1"} 101
my_metric_threshold{instance="special2"} 102
my_metric_threshold 100  # default for most of instances

希望获得可靠性:

  1. 如果我忘记为某些实例指定特殊阈值,则应使用默认阈值进行处理。
  2. 如果具有默认阈值的指标也丢失(例如,我不小心删除了
    .prom
    文件),我应该收到某种有关不正确配置的警报(可能使用单独的规则)。

我是普罗米修斯的新手,我找不到任何解决这个问题的例子。

prometheus
1个回答
0
投票

您的总体方法是正确的。但这里有一些建议如何让您的生活更轻松。

  • 使特殊阈值的名称与默认阈值不同。
my_metric_threshold_special{instance="server1"} 101
my_metric_threshold_special{instance="server42"} 102
my_metric_threshold_default 100  
# if you'll expose it through textfile collector too, it will also have an instance label.
# It doesn't matter, just make sure to expose it only once.
  • 针对默认情况和特殊情况的单独警报规则
- alert: HighValueAlertDefault
  expr: my_metric > on() group_left() my_metric_threshold_default unless on(instance) my_metric_threshold_special
- alert: HighValueAlertSpecial
  expr: my_metric > on(instance) group_left() my_metric_threshold_special

这里默认警报规则比较忽略所有标签,并忽略具有特殊阈值的实例的指标。

特殊警报规则只是将指标与阈值进行比较。


要检查

my_metric_threshold_default
,您可以使用表达式

absent(my_metric_threshold_default) or count(my_metric_threshold_default)>1
© www.soinside.com 2019 - 2024. All rights reserved.