0
点赞
收藏
分享

微信扫一扫

PromQL 阈值

纽二 2022-02-23 阅读 81

阈值


PromQL 通过提供一组过滤的二元运算符(><== 等),允许根据其样本值过滤一组序列,这种过滤最常见的场景就是在报警规则中使用的阈值。比如我们想查找在过去 15 分钟内的 status="500" 错误率大于 20% 的所有 HTTP 路径,我们在 rate 表达式后面添加一个 >0.2 的过滤运算符:

rate(demo_api_request_duration_seconds_count{status="500",job="demo"}[15m]) > 0.2

这个查询只会将错误率大于 20% 的数据过滤出来。

这种过滤方式不仅适用于单个数字,PromQL 还允许你用一组时间序列过滤另一组序列。与上面的二元运算一样,比较运算符会自动应用于比较左侧和右侧具有相同标签集的序列之间。 on() / ignoring()group_left() / group_right() 修饰符的作用也与我们前面学习的二元算术运算符一样。

以下示例是选择所有具有 500 错误率且至少比同一路径的总请求率大 50 倍的路径:

  rate(demo_api_request_duration_seconds_count{status="500",job="demo"}[5m]) * 50
> ignoring(status)
  sum without(status) (rate(demo_api_request_duration_seconds_count{job="demo"}[5m]))

不过需要注意的是我们必须忽略匹配中的 status 标签,因为在左边一直有这个标签,而右边没有这个标签。

比如我们还可以计算 demo 演示服务实例在一小时内的预测磁盘使用量,但要过滤只有那些预测磁盘已满的实例。(指标是1对1的关系)

predict_linear(demo_disk_usage_bytes{job="demo"}[1h], 3600) >= demo_disk_total_bytes{job="demo"}

Prometheus 支持以下过滤操作:

  • ==
  • !=
  • <
  • <=
  • >
  • >=

有时你可能想知道比较运算符的结果而不实际删除任何输出系列。要实现这一点,我们可以向运算符添加一个 bool 修饰符来保留所有的序列,但是把输出样本值设置为 1(比较为真)或 0(比较为假)。

例如,要简单地显示一组数据中哪些请求率高于或低于 0.2/s,我们可以这样查询:

rate(demo_api_request_duration_seconds_count{job="demo"}[5m]) > bool 0.2

我们可以看到输入序列的结果为 0 或 1,把数字条件转换为了布尔输出值。

 

举报

相关推荐

0 条评论