PromQL if/else 类似表达式

Mir*_*rco 15 prometheus promql

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

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

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

if(easter_sunday_in_april > 0)
    return 4
else
    return 3
Run Code Online (Sandbox Code Playgroud)

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

- 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
Run Code Online (Sandbox Code Playgroud)

val*_*ala 15

if(easter_sunday_in_april > 0)
    return 4
else
    return 3
Run Code Online (Sandbox Code Playgroud)

可以表示为以下 PromQL 查询:

(vector(4) and on() (easter_sunday_in_april > 0)) or on() vector(3)
Run Code Online (Sandbox Code Playgroud)

它使用andandor 逻辑运算符on() 修饰符

PS 这个查询可以通过and运算符用MetricsQL表达为更容易理解的形式:ifdefault

(4 if (easter_sunday_in_april > 0)) default 3
Run Code Online (Sandbox Code Playgroud)

MetricsQL 是由我从事的项目VictoriaMetrics提供的类似 PromQL 的查询语言。