如何在prometheus中按两个标签过滤?

Posted

技术标签:

【中文标题】如何在prometheus中按两个标签过滤?【英文标题】:How to filter by two labels in prometheus? 【发布时间】:2021-10-12 13:52:45 【问题描述】:

我们有一个error_count 指标,它有两个标签:

    客户 error_code

因为我们知道有一个客户端会有(比如说,404 error_code)这是无法避免的,所以我们想在我们的仪表板中排除它。

类似:

error_countclient!="foo_client" and error_code!="404"

但是

error_countclient!="foo_client", error_code!="404"

不起作用,因为它将排除所有来自 foo_client 和所有 404 错误。

更糟糕的是,我只能控制 Grafana 的 PromQL,也许配置 Prometheus 的收集可以解决这个问题,但我无权配置这个,因为它们由其他团队管理。

【问题讨论】:

【参考方案1】:

如果我理解正确,您想要的是 所有 客户的 error_count 指标。如果它是foo_client,那么您只需要它不是 404 错误代码。

这是在 Prometheus 中执行此操作的一种方法:获取所有不是 foo_client 的条目,或者 foo_client 的条目没有 error_code=404

error_countclient!="foo_client" or error_countclient="foo_client", error_code!="404"

【讨论】:

【参考方案2】:

您可以使用or,它是 promQL 中的 union operator。

error_countclient!="foo_client"
or
error_counterror_code!="404"

【讨论】:

谢谢,这个可以解决。但是将来我们可能需要添加更多,比如client=bar and error_code=403 也应该被忽略。有没有一种简单且可维护的方法来做到这一点?谢谢。

以上是关于如何在prometheus中按两个标签过滤?的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus 基于标签过滤 - 错误

Prometheus 基于 Labels 的过滤

在Javascript中按多个条件过滤数组

如何在 Flask SQLAlchemy 中按多个条件进行过滤?

在 Firebase Analytics BigQuery 数据库中按相同 ARRAY 或 STRUCT 中的两个值过滤查询

如何使用 promql 在新标签上对两个 Prometheus 时间序列进行分组?