Grafana Prometheus计算未成功探测成功响应的总停机时间,但不包括一分钟的停机时间

Grafana Prometheus计算未成功探测成功响应的总停机时间,但不包括一分钟的停机时间,prometheus,grafana,prometheus-operator,prometheus-blackbox-exporter,Prometheus,Grafana,Prometheus Operator,Prometheus Blackbox Exporter,我有一个查询说(1-probe_success{instance=”https://www.google.com“})-我基本上是在尝试获取实例关闭的总次数。目前,当我将它设置为“Singlestat”时,它可以正常工作,在Grafana上显示“Total”值 但是,如果我想排除不到一分钟的停机时间,该怎么办?普罗米修斯是否有允许子查询/条件来实现这一点 我的普罗米修斯目前设置为每15秒收集一次数据。理想情况下,我希望在下面的场景中看到我的总价值5 最近2分钟内的样本数据 上午7:00:00-1

我有一个查询说(1-probe_success{instance=”https://www.google.com“})-我基本上是在尝试获取实例关闭的总次数。目前,当我将它设置为“Singlestat”时,它可以正常工作,在Grafana上显示“Total”值

但是,如果我想排除不到一分钟的停机时间,该怎么办?普罗米修斯是否有允许子查询/条件来实现这一点

我的普罗米修斯目前设置为每15秒收集一次数据。理想情况下,我希望在下面的场景中看到我的总价值5

最近2分钟内的样本数据

上午7:00:00-1(向下)

上午7:00:15-1(向下)

上午7:00:30-1(向下)

上午7:00:45-1(向下)

上午7:01:00-1(向下)

上午7:01:15-0(上行)

上午7:01:30-1(向下)

上午7:01:45-0(上行)

上午7:02:00-0(上行)


谢谢

表示停机时间超过一分钟的方法是:

max_over_time(up[1m])
它将显示服务中断超过1分钟的次数。例如,对于间隔为15s的输入序列(0表示向下),仅当0持续1min(4个连续零)时,输出序列才为
0

如果要计算系统关闭的次数(即从1切换到0的次数),可以使用来计算系统切换的次数。然后再加上一点逻辑,它下降了多少次

floor(changes(max_over_time(up[1m])[1d:])/2) + (up == bool 0)
如果您想计算在关闭状态下花费的时间,这将变得更加复杂,因为您必须检测从1到0的切换,该切换持续1分钟,以及随后的关闭状态,直到第一次从0切换回1

它可以是大致如下的东西:

(max_over_time(up[60s]) == bool 0) * ((up offset 61s == bool 1) * count(up[60s]) OR vector(1))
当切换时间超过1分钟时,将给出前面的数字0,然后是1

input : '1 1 1 1 0 1 0 0 1 0 0 0 0 0 0'
output: '0 0 0 0 0 0 0 0 0 0 0 0 4 1 1'
最后,计算窗口上该值的平均值,并乘以窗口中的秒数:

 # downtime for more than 1min other the previous day
 average((...)[1d:]) * 86400
注意:我没有测试表达式,它们可能需要一些修改

 # downtime for more than 1min other the previous day
 average((...)[1d:]) * 86400