【问题标题】:How to filter out certain series from a subset of timeseries?如何从时间序列的子集中过滤掉某些序列?
【发布时间】:2022-08-14 18:12:50
【问题描述】:

我们有很多系列,我需要从中提取一个子集,然后过滤掉某些系列。如何在 PromQL 中做到这一点。能够只用一个正则表达式来做到这一点会很棒,但我想不出任何一个,尤其是在这样有限的正则表达式子集中,没有前瞻(或其他东西)。

我最终得到了这样的东西(真正的正则表达式显然要复杂得多):

up{instance=~\"^.*:.*\"} unless up{instance=~\"^.*:10000$\"}

这是如何完成的还是有更好的最佳实践?

  • 不,你几乎涵盖了它。唯一可能有帮助的是负匹配。例如。 up{instance!~\"some_garbage.*\"}

标签: prometheus promql


【解决方案1】:

PromQL 允许在单个 time series selector 中为同一标签指定多个过滤器。例如,以下查询将找到与 {instance=~"^.*:.*"} 匹配但同时不匹配 {instance=~"^.*:10000$"}up 系列:

up{instance=~"^.*:.*", instance!~"^.*:10000$"}

请注意,Prometheus 会自动在正则表达式的开头和结尾添加 ^$ 锚点,因此查询可以简化为:

up{instance=~".*:.*", instance!~".*:10000"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2022-11-04
    • 2016-08-02
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多