多值 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的主要内容,如果未能解决你的问题,请参考以下文章