Prometheus查询节点与Pod跨节点出向流量传输速率的方法
节点发往远程节点的流量传输速率
要排除同节点内Pod间的通信流量,直接统计节点物理网卡的出站流量即可——因为同节点内Pod间的通信仅通过容器网桥(如docker0、cni0)转发,不会经过物理网卡。使用以下PromQL查询:
rate(node_network_transmit_bytes_total{device!~"docker0|cni0|flannel.*|weave.*"}[1m])
- 解释:通过
device!~排除容器网桥、CNI插件创建的虚拟网卡,只保留物理网卡的指标;rate()函数计算1分钟内的平均传输速率。
Pod经节点发往外部的流量传输速率
这个需求需要区分Pod出站流量的目标IP是否属于同节点内部,具体实现依赖监控指标的配置情况:
方法1:基于目标IP过滤(需cAdvisor支持dst_ip标签)
假设当前节点的Pod CIDR是10.244.1.0/24(需替换为你的实际节点Pod网段),查询如下:
sum by (pod) ( rate(container_network_transmit_bytes_total{image!="", dst_ip!~"10.244.1.0/24"}[1m]) )
- 解释:
dst_ip!~排除同节点内Pod的IP段,统计Pod发往外部(其他节点/公网)的流量速率;sum by (pod)按Pod维度聚合。
方法2:无dst_ip标签时的替代方案
如果cAdvisor未开启dst_ip标签,可通过节点物理网卡流量与同节点Pod间流量的差值估算节点级的Pod外部总流量:
sum by (node) (rate(container_network_transmit_bytes_total{image!=""}[1m])) - rate(node_network_transmit_bytes_total{device=~"cni0|docker0"}[1m])
- 解释:节点所有Pod的总出站流量,减去容器网桥的流量(即同节点Pod间的通信量),得到的就是节点内所有Pod发往外部的总流量;此方法无法按单个Pod拆分数据。
内容的提问来源于stack exchange,提问作者Dev Jain
相关产品推荐
相关产品推荐

