【问题标题】:how to filter by value 1|0 when using count_over_time使用 count_over_time 时如何按值 1|0 过滤
【发布时间】:2021-04-15 12:31:24
【问题描述】:

我正在从 mysqld_exporter 将数据收集到 Prometheus 中,并希望创建一个 Grafana 仪表板,我可以在其中以百分比表示服务可用性。

通过使用这个查询:

 count_over_time(mysql_up{instance="10.0.0.5:9104"}[1m])

mysql_up 的输出是 1 或 0

我得到所有数据点的总和,其值为1|0,在这种情况下,我正在抓取每个15s,所以我得到4 数据点。

现在例如,如果从 4 个数据点中,三个的值为 1,一个值为 0,这将是可用性的 75%,我想绘制 75% 使用:

(total_datapoints - datapoints_with_value_0) / total_datapoints * 100
(4-1)/4 * 100 

但现在我的问题是如何查询 Prometheus 以仅获取值为 0 的数据点

如何按值过滤,然后应用时间范围?

如果我尝试类似:

count_over_time(mysql_up{instance="10.0.0.5:9104"} == 0 [1h])

count_over_time(mysql_up{instance="10.0.0.5:9104"} == 0)[1h])

我得到错误:

parse error: ranges only allowed for vector selectors

有什么想法吗?

【问题讨论】:

    标签: prometheus grafana promql


    【解决方案1】:

    我认为以下查询会准确返回您想要的结果(可用性百分比):

    100*avg_over_time(mysql_up{instance="10.0.0.5:9104"}[1m])
    

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      相关资源
      最近更新 更多