PromQL 多连接

Posted

技术标签:

【中文标题】PromQL 多连接【英文标题】:PromQL multi join 【发布时间】:2020-08-12 08:28:50 【问题描述】:

好的,这不是我想要运行的简单 PromQL 查询。这是我的输入数据:

accessPoint_numClientsmac="00:11:22:33:44:55" 11
accessPoint_numClientsmac="00:11:22:33:44:AA" 12
accessPoint_numClientsmac="00:11:22:33:44:BB" 5

accessPointsmac="00:11:22:33:44:55", groupId="1" 1
accessPointsmac="00:11:22:33:44:AA", groupId="1" 1
accessPointsmac="00:11:22:33:44:BB", groupId="2" 1

controller_zone_groupsgroupId="1", groupName="Foo" 1
controller_zone_groupsgroupId="2", groupName="Bar" 1
controller_zone_groupsgroupId="3", groupName="Baz" 1

所以,我想生成一个 grafana 图,按组对客户计数进行分组,并打印出相关的 groupNames。

这是我目前的尝试,但这与有效的查询相去甚远:

sum by (groupId) (accessPoint_numClients * on (mac) group_left(groupId) accessPoints * on (groupId) group_left(groupName) controller_zone_groups)

有没有机会让它工作?

谢谢,沃尔克...

================更新===============

好的,也许是一些带有响应的示例查询:

sum by (apGroupId) ((smartzone_accessPoint_numClients * on (mac) group_left(apGroupId) smartzone_accessPoints) or (groupId) group_left(groupName) smartzone_controller_zone_groups)

==> "在 char 125 处解析错误:聚合中出现意外,预期为 \")\""

sum by (apGroupId) (smartzone_accessPoint_numClients * on (mac) group_left(apGroupId) smartzone_accessPoints) * on (apGroupId) group_left(groupName) smartzone_controller_zone_groups

==> "不允许多对多匹配:匹配的标签在一侧必须是唯一的"

sum by (groupName) (smartzone_accessPoint_numClients * on (mac) group_left(apGroupId) smartzone_accessPoints) * on (apGroupId) group_left(groupName) smartzone_controller_zone_groups

==> "不允许多对多匹配:匹配的标签在一侧必须是唯一的"

【问题讨论】:

【参考方案1】:

尝试使用以下内容:

sum by (groupName) (
  sum by (groupId) (
    accessPoint_numClients * on(mac) group_right(groupId) accessPoints
  ) * on(groupId) group_right(groupName) controller_zone_groups
)

【讨论】:

【参考方案2】:

您的问题有点不清楚,但我认为您要问的是为什么 groupName 不在输出中。答案是sum 将其聚合起来,将groupName 添加到by 即可解决。

【讨论】:

以上是关于PromQL 多连接的主要内容,如果未能解决你的问题,请参考以下文章

我如何在普罗米修斯(kubernetes 监控)中获取(当前)已建立的 TCP 连接数

Prometheus : 入门

4.PromQL快速入门

PromQL:rate() 函数的用途是啥?

PromQL 总和

从系列结果 PromQL 中省略标签