普罗米修斯翻滚窗口结块

时间:2019-06-21 08:19:09

标签: prometheus promql

我想要特定时间范围内的汇总。例如。每小时,每天,但每小时从09:00-10:00(滚动窗口),而不是1小时前(跳跃窗口)。

如果我们可以减去因可变时间而偏移的计数器,则有可能,例如:

x_count offset (minutes()m) - x_count offset ((minutes()+60)m),但偏移量似乎无法评估函数。

有关如何完成此操作的建议?

1 个答案:

答案 0 :(得分:0)

您可以结合使用timestamp()函数和hour()day_of_month()来过滤给定小时/天之内的样本;或与time()结合使用以过滤掉当前小时/天之内的样本。

这是一个让您入门的脑筋急转弯:

up{job="prometheus"} + ignoring(year, month, day_of_month) group_right
  count_values without() ("year", year(timestamp(
    count_values without() ("month", month(timestamp(
      count_values without() ("day_of_month", day_of_month(
        timestamp(up{job="prometheus"}
      )))
    )))
  ))) * 0

这将为每个yearmonthday_of_month标签组合创建单独的指标。然后,您可以在这些指标上avg_over_time(或任何_over_time);或按年,月,月的天汇总它们。诸如rate()之类的技巧比较棘手,因为您可能需要在短距离(例如1分钟)内计算rate(),然后将其平均化,因此您需要记录规则或{{3 }}。