管理 pushgateway 最近抓取时间的 prometheus 限制

Posted

技术标签:

【中文标题】管理 pushgateway 最近抓取时间的 prometheus 限制【英文标题】:Managing prometheus limitation of pushgateway's recent scrape time 【发布时间】:2020-03-29 15:27:17 【问题描述】:

我看到其他线程/帖子(在 github,*** 上),人们在 prometheus 中请求了能够根据指标的时间戳(最后一次推送到 pushgateway 时)过滤或标记指标为过时/过期的功能。似乎这违背了普罗米修斯的工作方式,这很好。但是,我想知道人们是如何解决这个问题的。

我一直在尝试一些事情,但不幸的是没有成功:

在包含纪元时间的指标中添加了一个标签。使用此标签值过滤指标(或将指标的值更新为指示指标过时的某些状态)以进行指示。 我发现这会导致标签值在字符串中,但无法将其转换为整数以根据当前时间进行比较(例如执行“time() - timestamp) > 3600”之类的操作)。 使用作业的“push_time_seconds”指标能够识别上次推送的时间戳,并将数据过滤或标记为过时。每当用户推送数据时,我都会看到这个指标自动添加到 prometheus 中。例如,如果我要推送以下数据:

我在 pushgateway 指标中看到以下指标:

push_time_secondsinstance="",job="test" 1.5754837280426762e+09 some_metricinstance="",job="test",label1="value1",label2="value2" 5

但是,我不知道如何构建一个 PromQL 查询,该查询将使用 push_time_seconds 指标来更新 some_metric 中的值。就像 push_time_seconds 超过一个小时一样,将 some_metric 的值设置为 0。

有人对此有什么建议吗?

【问题讨论】:

【参考方案1】:

我发现了另一个基于 PromQL 的数据库,名为“Victoria Metrics”。我能够使用布尔和“if”运算符来操纵 push_last_seconds 和我的查询来做我想做的事。

我最终使用了两种方法:

脚本/批处理作业 -> pushgateway VictoriaMetrics 这将使用我在下面指定的布尔逻辑。 脚本/批处理作业 -> VictoriaMetrics 这完全消除了使用 pushgateway 的需要。

如果有人想了解更多信息,请告诉我。

另一个查询(显然 'job' 属性是这里的关键):

avg(SomeMetricjob="some_job") if (time() - push_time_secondsjob="some_job" < 30)

做比较/布尔的例子:

WITH (x = avg(SomeMetricjob="some_job"), y = (NaN if 3 < 2) default 2) (y default 3)

两者结合:

WITH (x = avg(SomeMetricjob="some_job"), y = (NaN if (time() - push_time_secondsjob="some_job" < 30)) default 2) (y default 3)

【讨论】:

是的,一些更多的细节肯定会对将来提到这个的任何人有所帮助:)

以上是关于管理 pushgateway 最近抓取时间的 prometheus 限制的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus-pushgateway

Prometheus监控运维实战十一:Pushgateway

解析 Prometheus PushGateway 推送监控指标全流程

解析 Prometheus PushGateway 推送监控指标全流程

kubernetes之监控系统--prometheus+grafana+alertmanager

Flink监控信息写入到PushGateway出现 java.io.IOException: Response code from http xx was 200问题