我有一个查询说(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
注意:我没有测试表达式,它们可能需要一些修补