【问题标题】:Prometheus: detect creation of metrics (same name, different labels)Prometheus:检测指标的创建(同名,不同标签)
【发布时间】:2020-01-02 15:41:46
【问题描述】:

假设我们有度量 created 具有以下时间纪元值(每个值都在前一个值之后收集,因此实例 xy 不能同时使用)

created{instance:'x'} 1567000047
created{instance:'x'} 1567000047
created{instance:'x'} 1567000047
created{instance:'y'} 1567000050
created{instance:'y'} 1567000050
created{instance:'y'} 1567000050

标签instance 的值是动态的。

如何使用 PromQL 查询数据以检测在 epoch 值 1567000047 时创建了一个实例,而在 1567000050 时创建了另一个实例?

我想在 Grafana 中绘制值以查看何时创建新实例。或者至少我怎样才能总结过去 3 小时内创建的实例数量(使用现有值)?

我不能sum 这些值,因为我会得到一条直线。据我所知,您无法检测到从缺失到某物的变化,只能从 0 之类的值中检测到。

【问题讨论】:

    标签: prometheus promql


    【解决方案1】:

    当我阅读您的请求时,您想知道created 指标在不考虑实例标签的情况下发生变化的次数。

    您的第一个问题是关于忽略实例标签,因为为了计算随时间变化的数量,您需要一个将向量转换为向量的函数。这在 Prometheus 2.7 版之前不存在。 如果您有旧版本的 prometheus,则必须使用 adhoc recoding rule

    我假设你有一个最近的 Prometheus,安装并且你可以使用子查询。以下应提供一个单一的度量向量,为您提供上次创建的时间(过去 3 小时内):

    (max(created))[3h:]
    

    一旦你得到它,你就可以使用changes() 函数来计算更改的数量。为第一次创建添加一个帐户:

    changes((max(created))[3h:]) + 1
    

    这应该会为您提供过去 3 小时内创建的实例数。

    请注意,Prometheus 上的子查询可能很繁重,使用记录规则会有所帮助。

    【讨论】:

    • 感谢您提及子查询。在我的情况下,我不需要 + 1,因为 0 对于没有创建新实例是可以的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多