普罗米修斯小于最大值表达式

Prometheus less than max value expression

我们将应用程序的软件版本存储在名为 app_software_version 的 Prometheus 仪表中,这会导致数据如下所示:

app_software_version{application="foo", instance="host-1", job="custom"}     3186
app_software_version{application="foo", instance="host-2", job="custom"}     3184
app_software_version{application="bar", instance="host-3", job="custom"}     279
app_software_version{application="bar", instance="host-4", job="custom"}     279

我们想要创建一个 PromQL 表达式,对于应用程序版本低于我们为该应用程序存储的最大版本的实例,该表达式 returns 为真,告诉我们该实例为真。这个用例:我们希望表达式驱动一个警报规则,告诉我们我们是否有一个实例 运行 一个软件的旧版本。

在上面的例子中,我们想要一个表达式,在计算时,returns像这样

{application="foo", instance="host-2}    True

我们已经能够创建一个表达式来计算每个应用程序的最大软件版本,通过 运行 max(app_software_version) by(application) 我们得到

{application="foo"}    3186
{application="bar"}    279

不幸的是,我们无法成功地将其构建到表达式中,从而给出我们正在寻找的结果。

尝试以下查询:

app_software_version < on(application) group_left max(app_software_version) by(application)

它使用 many-to-one join 将左侧的每个系列与右侧每个 application 标签的最大值进行比较。