prometheus - 如何使用 prometheus 和 node_exporter 获得服务器的整体正常运行时间

标签 prometheus prometheus-node-exporter

我正在寻找一个查询来获取上周运行 prometheus 的服务器的平均正常运行时间。它应该是大约 15 小时/周,所以大约 8-10%。

我在 CentOS 7.6.1810 上使用 Prometheus 2.5.0 和 node_exporter。
我最有希望的实验是:

1 - avg_over_time(up{job="prometheus"}[7d])

这是我在寻找获得平均正常运行时间的方法时发现的,但它给了我正好 1。(我猜它忽略了没有发生擦伤的时间?)

2 - sum_over_time(up{job="prometheus"}[7d]) * 15/604800

这在技术上有效,但取决于抓取间隔,在我的情况下为 15 秒。我似乎无法找到从 prometheus 的配置中获取所述间隔的方法,因此我必须将其硬编码到查询中。

我还试图找到获取工作的所有开始和结束时间的方法,但到目前为止无济于事。

最佳答案

干得好。不要问。 (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 metric(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 - 如何使用 prometheus 和 node_exporter 获得服务器的整体正常运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58080200/

    相关文章:

    prometheus - Grafana 查询不同标签数量

    prometheus - 如何在普罗米修斯中获取速率的分位数

    kubernetes - 节点导出器和 kubectl top 似乎报告了不同的内存利用率值?

    docker - 节点导出器应该从主机还是容器运行?

    prometheus - blackbox exporter ssh连接测试问题

    docker - Prometheus的AlertManager中的CrashLoopBackOff

    kubernetes - 无法从普罗米修斯适配器检索自定义指标

    linux - Node Exporter 绑定(bind)地址已经运行

    Prometheus 无指标清除警报