如何使用 prometheus 和 node_exporter 获得服务器的整体正常运行时间
How to get overall uptime of a server with prometheus and node_exporter
我正在寻找一个查询,以获取上周运行 prometheus 的服务器的平均正常运行时间。它应该是大约 15 小时/周,所以大约 8-10%。
我在 CentOS 7.6.1810 上使用带有 node_exporter 的 Prometheus 2.5.0。
我最有希望的实验是:
1 - avg_over_time(up{job="prometheus"}[7d])
这是我在寻找获得平均正常运行时间的方法时发现的,但它正好给了我 1。(我猜它忽略了没有刮擦发生的时间?)
2 - sum_over_time(up{job="prometheus"}[7d]) * 15 / 604800
这在技术上可行,但取决于抓取间隔,在我的例子中是 15 秒。我似乎找不到从普罗米修斯的配置中获取所述间隔的方法,所以我必须将其硬编码到查询中。
我也尝试过寻找获取工作的所有开始和结束时间的方法,但到目前为止无济于事。
给你。不要问。 (o:
avg_over_time(
(
sum without() (up{job="prometheus"})
or
(0 * sum_over_time(up{job="prometheus"}[7d]))
)[7d:5m]
)
一点一点解释:
sum without() (up{job="prometheus"})
:采用 up
指标(sum without()
部分用于去除指标名称,同时保留所有其他标签);
0 * sum_over_time(up{job="prometheus"}[7d])
:为过去一周看到的每个 up{job="prometheus"}
标签组合生成一个零值向量(例如,如果您有多个 Prometheus 实例);
or
两者结合在一起,所以您在可用的地方得到实际值,在缺少的地方得到零;
[7d:5m]
:PromQL subquery,根据前面的表达式生成一个跨越 7 天、分辨率为 5 分钟的范围向量;
avg_over_time
:取 up
指标随时间推移的平均值,默认情况下填充零。
您可能还想在该表达式的末尾添加一个 and sum_over_time(up{job="prometheus"}[7d]
,以仅获取过去 7 天内某个时间点存在的标签组合的结果。否则,由于 7 天范围和 7 天子查询的组合,您将获得过去 14 天所有组合的结果。
无论怎么想,这都不是一个有效的查询,但它不需要您将抓取间隔硬编码到查询中。按照要求。 (o:
我正在寻找一个查询,以获取上周运行 prometheus 的服务器的平均正常运行时间。它应该是大约 15 小时/周,所以大约 8-10%。
我在 CentOS 7.6.1810 上使用带有 node_exporter 的 Prometheus 2.5.0。 我最有希望的实验是:
1 - avg_over_time(up{job="prometheus"}[7d])
这是我在寻找获得平均正常运行时间的方法时发现的,但它正好给了我 1。(我猜它忽略了没有刮擦发生的时间?)
2 - sum_over_time(up{job="prometheus"}[7d]) * 15 / 604800
这在技术上可行,但取决于抓取间隔,在我的例子中是 15 秒。我似乎找不到从普罗米修斯的配置中获取所述间隔的方法,所以我必须将其硬编码到查询中。
我也尝试过寻找获取工作的所有开始和结束时间的方法,但到目前为止无济于事。
给你。不要问。 (o:
avg_over_time(
(
sum without() (up{job="prometheus"})
or
(0 * sum_over_time(up{job="prometheus"}[7d]))
)[7d:5m]
)
一点一点解释:
sum without() (up{job="prometheus"})
:采用up
指标(sum without()
部分用于去除指标名称,同时保留所有其他标签);0 * sum_over_time(up{job="prometheus"}[7d])
:为过去一周看到的每个up{job="prometheus"}
标签组合生成一个零值向量(例如,如果您有多个 Prometheus 实例);or
两者结合在一起,所以您在可用的地方得到实际值,在缺少的地方得到零;[7d:5m]
:PromQL subquery,根据前面的表达式生成一个跨越 7 天、分辨率为 5 分钟的范围向量;avg_over_time
:取up
指标随时间推移的平均值,默认情况下填充零。
您可能还想在该表达式的末尾添加一个 and sum_over_time(up{job="prometheus"}[7d]
,以仅获取过去 7 天内某个时间点存在的标签组合的结果。否则,由于 7 天范围和 7 天子查询的组合,您将获得过去 14 天所有组合的结果。
无论怎么想,这都不是一个有效的查询,但它不需要您将抓取间隔硬编码到查询中。按照要求。 (o: