午夜范围内小时()的 PromQL 使用情况

Posted

技术标签:

【中文标题】午夜范围内小时()的 PromQL 使用情况【英文标题】:PromQL usage of hour() in a range over midnight 【发布时间】:2021-01-27 00:04:44 【问题描述】:

我正在尝试专门返回某个时间段之间的指标。我正在尝试针对具有不同水印的特定指标发出警报,具体取决于晚上或白天。

当我查询白天指标时,它工作正常:sum(increase(some_counter_total[5m])) and hour() >4 <20 这当然有效,因为 bigger than 4 but smaller than 23 是一个有效范围。

但是,当人们想在夜间这样做时,这会变得更有趣,对于反向时间段:sum(increase(some_counter_total[5m])) and hour() >20 <4 第一个条件bigger then 20 已经消除了以下smaller then 4。颠倒顺序时也是如此。

我尝试了一些使用or 的不同组合,但我一定做错了,因为我从来没有让查询正常工作。理想情况下,我想我会寻找一种方法来进行反向查询sum(increase(some_counter_total[5m])) and WHEN NOT hour() >4 <20

【问题讨论】:

【参考方案1】:

请注意,Prometheus 对数据向量进行操作。尝试negation(and vs. unless)排除您不想要的时间。

白天时间:

sum(increase(some_counter_total[5m])) and hour() >=9 <21

夜间:

sum(increase(some_counter_total[5m])) unless hour() >=9 <21

这可能不是最有效的解决方案,但我找不到其他方法,例如您的直接建议或 WHERE value IN (4, 5, 6, &lt;...night time hours...&gt;))。

【讨论】:

这就像一个魅力。谢谢!看起来我把这个复杂化了。

以上是关于午夜范围内小时()的 PromQL 使用情况的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中为日期添加时间(午夜)并在没有 1 或 2 小时班次的情况下打印它?

PromQL 查询之间的区别

PromQL 以图表形式每小时创建的 Kubernetes POD 数量

在 Prometheus PromQL 中获取最后一小时的平均费率

使用 Instant/ChronoUnit 获取今天午夜的 nanos-since-epoch 时间比使用 GregorianCalendar/Date 提前 24 小时

PromQL 查询从固定日期计算服务正常运行时间和停机时间