Prometheus 基于标号算法的普罗米修斯条件

Prometheus 基于标号算法的普罗米修斯条件,prometheus,promql,Prometheus,Promql,假设我有一个度量值my_metric,并希望根据labelmy_label计算当前度量值与两天前度量值之间的差异。有没有一种方法可以在PromQL中实现这一点而不必硬编码标签值 my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway",my_label="2020-05-01"} 10 my_metric{exported_job="my_job",instance="dr01:9091",job="push

假设我有一个度量值
my_metric
,并希望根据label
my_label
计算当前度量值与两天前度量值之间的差异。有没有一种方法可以在PromQL中实现这一点而不必硬编码标签值

my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway",my_label="2020-05-01"}   10
my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway",my_label="2020-05-02"}   20
my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway",my_label="2020-05-03"}   60
让我们假设我们在
2020-05-01
-预期输出将是
60-10=50

换句话说,我需要一个查询,在SQL中类似于:

SELECT m_2.value - m_1.value FROM my_metric m_1, my_metric m_2 
WHERE diff_date('day', m_2.my_label, m_1.my_label) = 2

这将使您在调用查询和度量值的时间与之前2天之间存在差异:

my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway"}
- ignoring(my_label) my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway"} offset 2d
您可以在此处阅读有关offset关键字的更多信息:

这将使您在调用查询和度量值的时间与之前2天之间存在差异:

my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway"}
- ignoring(my_label) my_metric{exported_job="my_job",instance="dr01:9091",job="pushgateway"} offset 2d
您可以在此处阅读有关offset关键字的更多信息:

这并不像看上去那么容易;)。我不想硬编码标签值。想象一下,对于
my\u label
,有一个具有不同值的记录表。我需要在整个表格中使用此差异
我的\u标签-2
。我编辑了我的答案,似乎我误解了你的问题,再次-请注意,我指的是标签,而不是值。我不在乎普罗米修斯生成的度量时间戳,因为它是一个技术日期-我需要根据我的标签的值进行计算,这是一个业务日期。我已经用类似SQL的类比编辑了我的问题,我想实现这一点。我想这在Grafana中是可行的,带有变量声明,但不是在普通的promql中,它不像看上去那么容易;)。我不想硬编码标签值。想象一下,对于
my\u label
,有一个具有不同值的记录表。我需要在整个表格中使用此差异
我的\u标签-2
。我编辑了我的答案,似乎我误解了你的问题,再次-请注意,我指的是标签,而不是值。我不在乎普罗米修斯生成的度量时间戳,因为它是一个技术日期-我需要根据我的标签的值进行计算,这是一个业务日期。我已经用类似SQL的类比编辑了我的问题,我想实现这一点。我想这在Grafana中是可行的,带有变量声明,但不是在普通的Promql中,所以您的基本问题是希望执行基于时间的比较,而是使用标签作为“true”时间戳,而不是度量被刮取的时间戳?这是一个已知的问题,请参见,您的基本问题是希望执行基于时间的比较,但使用标签作为“true”时间戳,而不是度量被刮取的时间戳?这是一个已知的问题,明白吗