普罗米修斯查询连续正常运行时间

prometheus query for continuous uptime

我是一名普罗米修斯新手,一直在努力寻找正确的查询来获得我的服务的最后一次连续正常运行时间。

例如,如果当前时间是 0:01:20,我的服务在 0:00:00 启动,在 0:01:01 关闭,在 0:01:10 再次启动,我'我想看到“10 秒”的正常运行时间。

我主要查看 "up{}" 指标,并可能将其与函数(changes()、rate() 等)结合使用,但到目前为止运气不佳。我也没有看到任何其他类似于 "up" 的普罗米修斯指标。

问题是您需要一些东西来判断您的服务何时实际启动以及节点是否启动:)
我们使用以下内容(希望对大家有所帮助或者每个人的大致思路):
1. 当我们查看主机时,我们使用 node_time{...} - node_boot_time{...}
2. 当我们查看特定进程/容器时(docker 通过 cadvisor 在我们的例子中)我们使用 node_time{...} - on(instance) group_right container_start_time_seconds{name=~"..."}) by(name,instance)

必须使用以下 PromQL 查询来计算以秒为单位的应用程序正常运行时间:

time() - process_start_time_seconds

此查询适用于在 Go, which use either github.com/prometheus/client_golang or github.com/VictoriaMetrics/metrics 客户端库中编写的所有应用程序,这些库默认公开 process_start_time_seconds 指标。此指标包含应用程序启动时间的 unix 时间戳。

Kubernetes 默认为每个启动的容器公开 container_start_time_seconds 指标。因此,以下查询可用于跟踪 Kubernetes 中容器的正常运行时间:

time() - container_start_time_seconds{container!~"POD|"}

需要container!~"POD|"过滤器来过滤辅助时间序列:

  • 带有 container="POD" 标签的时间序列反映了例如pause containers - 详见
  • 没有 container 标签的时间序列对应于例如cgroups 层次结构。有关详细信息,请参阅 this answer

如果您需要计算给定时间范围内的总体 per-target 正常运行时间,则可以使用 up 指标进行估算。 Prometheus 自动为每个抓取目标生成 up 指标。它在每次成功抓取时将其设置为 1,否则将其设置为 0。有关详细信息,请参阅 these docs。因此,以下查询可用于估算过去 24 小时内每个抓取目标的总正常运行时间(以秒为单位):

avg_over_time(up[24h]) * (24*3600)

有关详细信息,请参阅 avg_over_time 文档。