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

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

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

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

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

push_time_seconds{instance="",job="test"} 1.5754837280426762e+09 some_metric{instance="",job="test",label1="value1",label2="value2"} 5

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

有人对此有什么建议吗?

【问题讨论】:

    标签: prometheus


    【解决方案1】:

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

    我最终使用了两种方法:

    • 脚本/批处理作业 -> pushgateway VictoriaMetrics
    • 这将使用我在下面指定的布尔逻辑。
  • 脚本/批处理作业 -> VictoriaMetrics
  • 这完全消除了使用 pushgateway 的需要。
  • 如果有人想了解更多信息,请告诉我。

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

    avg(SomeMetric{job="some_job"}) if (time() - push_time_seconds{job="some_job"} < 30)
    

    做比较/布尔的例子:

    WITH (x = avg(SomeMetric{job="some_job"}), y = (NaN if 3 < 2) default 2) (y default 3)
    

    两者结合:

    WITH (x = avg(SomeMetric{job="some_job"}), y = (NaN if (time() - push_time_seconds{job="some_job"} < 30)) default 2) (y default 3)
    

    【讨论】:

    • 是的,一些更多的细节肯定会对将来提到这个的任何人有所帮助:)
    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2021-05-17
    相关资源
    最近更新 更多