如何用PromQL按agent_host统计OpenStack唯一路由器数量?
按网络节点统计唯一路由器数量的PromQL实现
你需要先结合agent_host和router_id做组合去重,再按节点分组计数,正确的查询语句如下:
count by(agent_host) (count by(agent_host, router_id) (openstack_neutron_l3_agent_of_router))
语句解释
- 内层分组去重:
count by(agent_host, router_id) (openstack_neutron_l3_agent_of_router)
把指标按「节点+路由器ID」的组合分组,这样同一个路由器在同一节点上的重复记录会被合并成一条,实现单节点内的路由器去重。 - 外层按节点计数:
count by(agent_host)
对每个节点下的去重后路由器组合进行计数,最终得到每个agent_host(网络节点)对应的唯一路由器数量。
原语句的问题
你之前写的count(count by(router_id) (openstack_neutron_l3_agent_of_router))只做了全局路由器ID的去重,没有关联节点信息,最后得到的是整个OpenStack环境里的唯一路由器总数,无法按节点拆分统计。
内容的提问来源于stack exchange,提问作者DaveWox
相关产品推荐
相关产品推荐

