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 中计算正常运行时间百分比或停机时间百分比