Ste*_*ire 8 grafana prometheus
因为Prometheus topk返回的结果比预期的要多,并且因为https://github.com/prometheus/prometheus/issues/586需要尚未通过https://github.com/grafana/grafana提供的客户端处理。/ issues / 7664,我正在尝试针对我的类似问题采用不同的近期解决方法。
在我的特定情况下,我想绘制的大多数度量标准值大多数时候都为零。只有当它们大于零时,它们才有意义。
我可以找到写prometheus查询的方法来基于标签的值过滤数据点,但是我还无法找到一种方法来告诉prometheus仅在度量值满足以下条件时才返回时间序列数据点:一定条件。就我而言,我想过滤一个大于零的值。
是否可以向Prometheus查询添加条件以根据指标值过滤数据点?如果是这样,我在哪里可以找到语法示例?
Cae*_*sar 12
如果您对brian的回答感到困惑:使用比较运算符进行过滤的结果不是布尔值,而是过滤后的系列。例如
min(flink_rocksdb_actual_delayed_write_rate > 0)
Run Code Online (Sandbox Code Playgroud)
将显示大于 0 的最小值。
如果您确实想要一个布尔值(或者更确切地说是 0 或 1),请使用类似
sum (flink_rocksdb_actual_delayed_write_rate >bool 0)
Run Code Online (Sandbox Code Playgroud)
这会给你非零计数。
这可以通过子查询来解决:
count_over_time((metric > 0)[5m:10s])
Run Code Online (Sandbox Code Playgroud)
上面的查询将返回过去metric5 分钟内大于 0 的数据点的数量。
此查询可能会返回不准确的结果,具体取决于方括号中的第二个参数(也称为step内部查询)与原始样本之间的实际间隔(也称为scrape_interval)之间的关系:
step超过scrape_interval,则计算过程中可能会丢失一些样本。在这种情况下,查询将返回低于预期的结果。step小于scrape_interval,则某些样本可能会被计数多次。在这种情况下,查询将返回比预期更大的结果。因此建议将 设为step以scrape_interval获得准确的结果。
PS 上述问题在我从事的类似 Prometheus 的监控系统 VictoriaMetrics 中得到了解决。它提供了count_gt_over_time()函数,非常适合这种情况。例如,以下MetricsQL查询返回过去 5 分钟内值大于 0 的原始样本的确切数量:
count_gt_over_time(metric[5m], 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12565 次 |
| 最近记录: |