值数组中每个元素的 PromQL 增量
PromQL delta for each elment in values array
我正在使用 PromQL 获取过去 5 百万分钟的计数器值,但我想获取每个返回值的计数器增量值。我可以使用 delta(http_requests[5m])
进行查询,但它仅 returns 第一个和最后一个元素的增量。有没有办法将所有值作为增量值取回?我查看了普罗米修斯函数 here 但找不到执行此操作的方法。
http_requests[5m]
{
"data": {
"result": [
{
"metric": {
"__name__": "http_requests",
"app": "cloud_engine",
"app_instance": "instance_01",
},
"values": [
[
"2021-10-26T02:33:07Z",
"36446"
],
[
"2021-10-26T02:34:07Z",
"36447"
],
[
"2021-10-26T02:35:07Z",
"36448"
],
[
"2021-10-26T02:36:07Z",
"36450"
],
[
"2021-10-26T02:37:07Z",
"36450"
]
]
}
],
"resultType": "matrix"
},
"status": "success"
}
显示每个值的增量的期望结果:
"values": [
[
"2021-10-26T02:33:07Z",
"0"
],
[
"2021-10-26T02:34:07Z",
"1"
],
[
"2021-10-26T02:35:07Z",
"1"
],
[
"2021-10-26T02:36:07Z",
"2"
],
[
"2021-10-26T02:37:07Z",
"0"
]
使用“delta(http_requests[1m])”,您将根据需要获得每个元素与其前身之间的增量。
如果您知道样本之间的间隔(例如上例中的一分钟),则可以使用以下 subquery:
delta(http_requests[1m])[5m:1m]
此即时查询应该 return 1 分钟间隔的最后 5 个增量。不幸的是,Prometheus 很可能会 return 清空结果,因为它需要至少两个方括号 window 后方样本进行 delta
计算,例如它没有考虑回顾 window 之前的最后一个点和回顾 window 中的第一个点之间的差异。所以查询必须重写为:
delta(http_requests[2m])[5m:1m]
不幸的是,由于同样的问题,此查询可能会产生意外结果 - Prometheus 跳过回顾前的最后一个样本 window 和回顾中的第一个样本 window [2m]
.
P.S。另一种解决方案是尝试 VictoriaMetrics 中的第一个查询。它考虑了上面提到的增量,因此它必须 return 预期结果。在 MetricsQL docs. Take a look also at rollup_delta 函数中查看更多详细信息 - 它计算给定 lookbehind window 的连续样本之间的增量,然后是 returns max
、min
和 avg
来自计算增量的值。
我正在使用 PromQL 获取过去 5 百万分钟的计数器值,但我想获取每个返回值的计数器增量值。我可以使用 delta(http_requests[5m])
进行查询,但它仅 returns 第一个和最后一个元素的增量。有没有办法将所有值作为增量值取回?我查看了普罗米修斯函数 here 但找不到执行此操作的方法。
http_requests[5m]
{
"data": {
"result": [
{
"metric": {
"__name__": "http_requests",
"app": "cloud_engine",
"app_instance": "instance_01",
},
"values": [
[
"2021-10-26T02:33:07Z",
"36446"
],
[
"2021-10-26T02:34:07Z",
"36447"
],
[
"2021-10-26T02:35:07Z",
"36448"
],
[
"2021-10-26T02:36:07Z",
"36450"
],
[
"2021-10-26T02:37:07Z",
"36450"
]
]
}
],
"resultType": "matrix"
},
"status": "success"
}
显示每个值的增量的期望结果:
"values": [
[
"2021-10-26T02:33:07Z",
"0"
],
[
"2021-10-26T02:34:07Z",
"1"
],
[
"2021-10-26T02:35:07Z",
"1"
],
[
"2021-10-26T02:36:07Z",
"2"
],
[
"2021-10-26T02:37:07Z",
"0"
]
使用“delta(http_requests[1m])”,您将根据需要获得每个元素与其前身之间的增量。
如果您知道样本之间的间隔(例如上例中的一分钟),则可以使用以下 subquery:
delta(http_requests[1m])[5m:1m]
此即时查询应该 return 1 分钟间隔的最后 5 个增量。不幸的是,Prometheus 很可能会 return 清空结果,因为它需要至少两个方括号 window 后方样本进行 delta
计算,例如它没有考虑回顾 window 之前的最后一个点和回顾 window 中的第一个点之间的差异。所以查询必须重写为:
delta(http_requests[2m])[5m:1m]
不幸的是,由于同样的问题,此查询可能会产生意外结果 - Prometheus 跳过回顾前的最后一个样本 window 和回顾中的第一个样本 window [2m]
.
P.S。另一种解决方案是尝试 VictoriaMetrics 中的第一个查询。它考虑了上面提到的增量,因此它必须 return 预期结果。在 MetricsQL docs. Take a look also at rollup_delta 函数中查看更多详细信息 - 它计算给定 lookbehind window 的连续样本之间的增量,然后是 returns max
、min
和 avg
来自计算增量的值。