Prometheus 中的时间加权范围查询

Time Weighted Range Query in Prometheus

我想计算记录的跟踪错误的性能指标,这是 Prometheus 中持久保存的时间序列。我感兴趣的是:

为澄清起见,它们的计算方式如下:

IAE 和 ISE 应该很简单。在 ITAE 和 ITSE 的情况下,“较旧”的错误值影响较小,新的错误值会被强调。

我已经创建了两个 Prometheus 规则:

rules:
- record: tracking_error:absolute
  expr: abs(tracking_error)
- record: tracking_error:squared
  expr: tracking_error*tracking_error

这些使我能够查询 IAE 和 ISE:

# IAE
sum_over_time(tracking_error:absolute[1h])
# ISE
sum_over_time(tracking_error:squared[1h])

但是我在为时间加权积分 ITSE 和 ITAE 设计查询时遇到困难。

我目前的做法是这样的:

我创建了一组额外的规则来保留标记的时间戳:

rules: 
- record: tracking_error:timestamp
  expr:  time()
- record: tracking_error:timestamp:labelled
  expr: label_replace(tracking_error:timestamp,"errorName","someError", "","")

这又可以编写如下查询:

sum_over_time(
  (
    tracking_error:absolute * ignoring (endpoint,instance,job,namespace,pod,service) group_left (errorName) (tracking_error:timestamp:labelled-(tracking_error:timestamp:labelled offset 1m))
  )[1m:]
)

感觉很恶心。这是否正确,还有另一种更好的方法吗?我希望有人能帮助我。

好多了,不依赖于额外的规则:

sum_over_time(
  (
    tracking_error:absolute 
    * 
    (timestamp(tracking_error:absolute)-timestamp(tracking_error:absolute offset 1m))

  )[1m:]
)