Prometheus 中的时间加权范围查询
Time Weighted Range Query in Prometheus
我想计算记录的跟踪错误的性能指标,这是 Prometheus 中持久保存的时间序列。我感兴趣的是:
- IAE:积分绝对误差
- ISE:积分平方误差
- ITAE:积分时间绝对误差
- ITSE:积分时间平方误差
为澄清起见,它们的计算方式如下:
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:]
)
我想计算记录的跟踪错误的性能指标,这是 Prometheus 中持久保存的时间序列。我感兴趣的是:
- IAE:积分绝对误差
- ISE:积分平方误差
- ITAE:积分时间绝对误差
- ITSE:积分时间平方误差
为澄清起见,它们的计算方式如下:
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:]
)