如何筛选同时存在于两个Prometheus查询的instance节点CPU使用率
解决方法
问题出在你用的and操作符匹配条件太严格——原查询里kube_pod_container_status_restarts_total{pod=~"foo-.*"}每条序列带了pod、container这类额外标签,而node_cpu_seconds_total{mode!="idle"}有mode、cpu标签,and on (instance)要求除了instance之外的其他标签也完全一致才能匹配,这显然做不到,所以没结果。
正确的做法是先把运行foo前缀Pod的节点instance提取出来(去掉多余标签),再用这个集合过滤CPU指标:
node_cpu_seconds_total{mode!="idle"} and on (instance) (count by (instance) (kube_pod_container_status_restarts_total{pod=~"foo-.*"}))
原理说明
count by (instance) (kube_pod_container_status_restarts_total{pod=~"foo-.*"}):按instance聚合,每个节点只保留一条仅含instance标签的序列,不管该节点上有多少个foo前缀的Pod。and on (instance):此时两边序列只有instance是共同标签,只要节点存在于聚合结果中,就会保留对应的CPU使用率指标序列。
内容的提问来源于stack exchange,提问作者kentor
相关产品推荐
相关产品推荐

