首页 > 解决方案 > PromQL if/else like 表达式

问题描述

我正在尝试使用高斯的复活节算法在 PromQL 中计算复活节星期日(我需要在公共假期忽略一些警报规则)。

我可以计算日期,但是我遇到了月份的问题,因为我需要一个 if/else 表达式。我的记录规则 easter_sunday_in_april 如果东部是四月返回 1,如果是三月返回 0。

(如何)我可以在 PromQL 中表达以下内容吗?

if(easter_sunday_in_april > 0)
    return 4
else
    return 3

为了完整起见,我在这里附上我的录制规则:

- record: a
    expr: year(europe_time) % 4

  - record: b
    expr: year(europe_time) % 7

  - record: c
    expr: year(europe_time) % 19

  - record: d
    expr: (19*c + 24) % 30

  - record: e
    expr: (2*a + 4*b + 6*d + 5) % 7

  - record: f
    expr: floor((c + 11*d + 22*e)/451)

  - record: easter_sunday_day_of_month_temp
    expr: 22 + d +e - (7*f)


  - record: easter_sunday_day_of_month_in_april
    expr: easter_sunday_day_of_month_temp > bool 31

  - record: easter_sunday_day_of_month
    expr: easter_sunday_day_of_month_temp % 31

标签: prometheuspromql

解决方案


想我找到了一种方法:

((easter_sunday_day_of_month_temp > bool 31 ) +3)

Easter_sunday_day_of_month_temp 返回复活节星期天的“原始”日期(1-31:三月的一天,> 四月的 31 天,我们必须计算模 31 才能得到四月的一天)。

所以如果easter_sunday_day_of_month_temp > bool 31为真,它返回 1,我加 3 得到 4(4 月),否则,我返回 3 的 3 月。

编辑:请证明我错了或告诉我一个更好的解决方案:-) 否则我会在两天内接受我的。


推荐阅读