我正在寻找一个查询,以获取上周运行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的配置中获取上述间隔的方法,因此我必须将其硬编码到查询中。
我还试图找到方法来获得一份工作的所有开始和结束时间,但到目前为止都无济于事。
答案 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';
逐点说明:
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])
标签组合生成零值向量(例如,如果您有多个Prometheus实例); up{job="prometheus"}
两者结合在一起,因此在可用的情况下获得实际值,在缺失的情况下获得零; or
:PromQL subquery,产生一个范围为7天的范围向量,基于其前面的表达式具有5分钟的分辨率; [7d:5m]
:在avg_over_time
指标的整个时间中取平均值,其中零作为默认值填充,而缺失。您可能还想在表达式的末尾加上up
,以仅获取过去7天内某个时间点存在的标签组合的结果。否则,由于7天范围和7天子查询的组合,您将获得前14天所有组合的结果。
无论如何,这都不是一种有效的查询,但是它不需要您将检索间隔硬编码到查询中。按照要求。 (o: