多值 Prometheus 查询 Grafana

Posted

技术标签:

【中文标题】多值 Prometheus 查询 Grafana【英文标题】:Multi-Value Prometheus Query Grafana 【发布时间】:2020-08-03 00:34:50 【问题描述】:

我正在使用 Grafana 和 Prometheus 查询在 Grafana 中为 Kubernetes 创建仪表板。我将节点的名称(在本例中为 3 个)放入一个变量中,然后将此值传递给其他查询以提取机器的 IP。提取的值是正确的。我启用了多值选项。

问题在于查询sum(rate(container_cpu_usage_seconds_totalid="/", instance=~"$ip_test:10250"[1m])) 和多个IP,因为它只占用其中一个。在其他查询中它可以工作,但我认为这是可能的,因为其他查询在变量之后没有:10250

我的问题,你知道任何连接所有 ip:port 的方法吗?例如:X.X.X.X:pppp|X.X.X.X:pppp

【问题讨论】:

【参考方案1】:

试试这样:

sum(rate(container_cpu_usage_seconds_totalid="/", instance=~"($ip_test):10250"[1m]))

【讨论】:

【参考方案2】:

从multiple values formating 文档中,Prometheus 变量扩展为regex:

InfluxDB 和 Prometheus 使用正则表达式,所以同一个变量 将被内插为 (host1|host2|host3)。每个值也会 如果不是正则表达式转义,则带有正则表达式控制字符的值将 打破正则表达式。

因此,您的变量 ip_test = ['127.0.0.1', '127.0.0.2',...] 应该转换为:(127\.0\.0\.1|127\.0\.0\.2)

这意味着您的表达式 =~$ip_test:10250 应转换为 =~"(127\.0\.0\.1|127\.0\.0\.2):10250",因此您不需要您要求的多重扩展。

它不起作用的原因是文档不正确或 Grafana 中存在错误(使用版本 v6.7.2 测试)。我怀疑,根据我的测试,Prometheus 扩展不会使用封闭的 () 进行扩展,您最终会得到表达式 =~"127\.0\.0\.1|127\.0\.0\.2:10250" - 这不是您想要的。

解决方法是使用正则表达式符号=~"$ip_test:regex:10250"

【讨论】:

以上是关于多值 Prometheus 查询 Grafana的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL---多值模糊查询的处理

使用 ODBC 查询 Access 2007 多值字段

ORACLE 子查询 嵌套查询 多值子查询

Bigquery 表嵌套多值列在查询时出错

sql查询多值属性

ASP多值多字段模糊查询分页问题