PromQL avg_over_time 用于非零值
PromQL avg_over_time for non-zero values
我正在尝试从仪表指标中获取 avg_over_time 值,但我只希望从指标的非零值(或准确地说是高于零的值)中获取平均值。
示例:
avg_over_time(foo[2d] > 0)
但我总是遇到解析错误:
binary expression must contain only scalar and instant vector types
我试过设置录音规则
expr: foo > 0
但不幸的是,结果相同。
这在 PromQL 中可行吗?
Prometheus 2.7 以上版本可以使用sub-query:
avg_over_time((foo > 0)[2d:])
虽然可以使用 Prometheus 子查询,例如 Michael 已经提到的 avg_over_time((foo > 0)[2d:])
,但建议的查询可能会丢失某些数据点或重复计算某些数据点,具体取决于之后的 resolution
值方括号中的冒号。例如,avg_over_time((foo > 0)[2d:1h])
在计算 avg_over_time
时每小时仅考虑一个原始数据点,而 avg_over_time((foo>0)[2d:1s])
将多次计算相同的原始数据点,如果抓取间隔为 foo
超过 1s
。默认情况下 resolution
值 equals to step
value passed in the query to /api/v1/query_range,因此查询的最终结果可能会完全不同,具体取决于传递给 /api/v1/query_range
的 step
查询参数。
如果您需要独立于 step
查询参数计算超出给定 threshold
的原始数据点的确切份额,请查看 [=25= 中的 share_gt_over_time(foo[2d], threshold)
函数].此函数可能有助于计算 SLO/SLI 正常运行时间 and/or 延迟。
我正在尝试从仪表指标中获取 avg_over_time 值,但我只希望从指标的非零值(或准确地说是高于零的值)中获取平均值。
示例:
avg_over_time(foo[2d] > 0)
但我总是遇到解析错误:
binary expression must contain only scalar and instant vector types
我试过设置录音规则
expr: foo > 0
但不幸的是,结果相同。
这在 PromQL 中可行吗?
Prometheus 2.7 以上版本可以使用sub-query:
avg_over_time((foo > 0)[2d:])
虽然可以使用 Prometheus 子查询,例如 Michael 已经提到的 avg_over_time((foo > 0)[2d:])
,但建议的查询可能会丢失某些数据点或重复计算某些数据点,具体取决于之后的 resolution
值方括号中的冒号。例如,avg_over_time((foo > 0)[2d:1h])
在计算 avg_over_time
时每小时仅考虑一个原始数据点,而 avg_over_time((foo>0)[2d:1s])
将多次计算相同的原始数据点,如果抓取间隔为 foo
超过 1s
。默认情况下 resolution
值 equals to step
value passed in the query to /api/v1/query_range,因此查询的最终结果可能会完全不同,具体取决于传递给 /api/v1/query_range
的 step
查询参数。
如果您需要独立于 step
查询参数计算超出给定 threshold
的原始数据点的确切份额,请查看 [=25= 中的 share_gt_over_time(foo[2d], threshold)
函数].此函数可能有助于计算 SLO/SLI 正常运行时间 and/or 延迟。