如何使用Prometheus和Node_exporter获得服务器的整体正常运行时间

时间:2019-09-24 12:19:47

标签: 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

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

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

1 个答案:

答案 0 :(得分:1)

您在这里。不要问(o:

create index fbi_myTable
    on trunc( date_time_of_identification );

select *
  from myTable
 where trunc( date_time_of_identification ) = date '2019-09-21';

逐点说明:

  1. 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部分用于除去度量标准名称,同时保留所有其他标签);
  2. sum without():为过去一周内看到的每个0 * sum_over_time(up{job="prometheus"}[7d])标签组合生成零值向量(例如,如果您有多个Prometheus实例);
  3. up{job="prometheus"}两者结合在一起,因此在可用的情况下获得实际值,在缺失的情况下获得零;
  4. orPromQL subquery,产生一个范围为7天的范围向量,基于其前面的表达式具有5分钟的分辨率;
  5. [7d:5m]:在avg_over_time指标的整个时间中取平均值,其中零作为默认值填充,而缺失。

您可能还想在表达式的末尾加上up,以仅获取过去7天内某个时间点存在的标签组合的结果。否则,由于7天范围和7天子查询的组合,您将获得前14天所有组合的结果。

无论如何,这都不是一种有效的查询,但是它不需要您将检索间隔硬编码到查询中。按照要求。 (o: