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



我有一个查询说(1-probe_success{instance="https://www.google.com"}( - 我基本上试图获得实例关闭的总次数。目前,当我将其设置为"单一状态"时,它在 Grafana 上显示"总计"值时工作正常。

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

我的普罗米修斯目前设置为每 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 分钟的次数。例如,对于间隔为 15 秒的输入序列(0 表示向下(,仅当 0 表示 1 分钟(4 个连续零(时,才会0输出序列

input : '1 1 1 1 0 1 0 0 1 0 0 0 0 0 0'
output: '1 1 1 1 1 1 1 1 1 1 1 1 0 0 0'

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

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 分钟然后 1 时,这将给出前面 0 的数量

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

注意:我没有测试表达式,它们可能需要一些修补

相关内容

  • 没有找到相关文章

最新更新