Prometheus 获取停机时间范围的摘要

Posted

技术标签:

【中文标题】Prometheus 获取停机时间范围的摘要【英文标题】:Prometheus Get a summary of down time ranges 【发布时间】:2021-09-16 04:31:28 【问题描述】:

我正在使用 blackbox_exporter 和 prometheus 监控一些服务。这对于计算服务可用性非常有用,但我在质疑自己是否可以使用 PromQL 获得过去 x 天的停机时间范围摘要?

例如,如果 probe_success 在下午 1 点到 1:30 之间变为 0,然后又在下午 3 点到 3:15 之间变为 0,我想在 Grafana 中获得这样的列表:

停机时间:

1 PM - 1:30 PM | 30 mins
3 PM - 3:15 PM | 15 mins

等等。

【问题讨论】:

【参考方案1】:

PromQL 很难解决您的问题。 Prometheus 是一个时间序列数据库,您希望从这些指标中恢复事件。

有一种方法可以恢复指标状态 0/1 发生变化的事件:

您可以使用检测范围与您的指标的轮询间隔匹配的changes() 函数来提取更改事件(如果轮询间隔错误,您将看到重复的更改并可能错过某些事件)

changes(metric[30s]) != 0

然后使用实际的度量值来识别上/下开关

(changes(metric[30s]) != 0) * metric

您可以使用子查询来可视化输出:((changes(metric[30s]) != 0) * metric)[2d:]

0 @1627421720
1 @1627427120
0 @1627508120
1 @1627513520

该值为您提供新状态,时间戳(@之后)为您提供事件的纪元时间(大约取决于轮询时间)。

我们离您想要的不远,困难在于如何获取这些指标并将它们转换为合并表。

在给出这个答案时,我使用的是 Grafana v8.0.4,我看不到将其集成到当前表格可视化中的方法。我最好的建议是使用 html panel 并运行您自己的 javascript 来显示您想要的内容。

【讨论】:

以上是关于Prometheus 获取停机时间范围的摘要的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Prometheus Grafana 中计算正常运行时间百分比或停机时间百分比

一文搞懂 Prometheus 的直方图

PromQL 查询从固定日期计算服务正常运行时间和停机时间

Prometheus-PQL

在 prometheus/grafana 中获取不同标签值的计数

如何使用 Spring Boot + Prometheus + Grafana 确定时间范围内的准确请求计数