You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes如何监控统计每个Ingress的流量吞吐量

统计NGINX Ingress单实例流量的实现方法

有多种成熟方案可以实现按Ingress维度统计收发流量,裸金属部署的K8s集群不需要额外适配,按需选择即可:

方案1:基于访问日志临时统计

NGINX Ingress Controller的默认访问日志已经内置了所需的维度字段,不需要额外修改配置就可以直接用:

  • 日志内置字段$ingress_name、$ingress_namespace可以定位到具体的Ingress资源
  • $request_length对应单请求的接收字节数,$bytes_sent对应单请求的发送字节数

如果只是临时统计特定时间段的流量,可以直接进入Ingress Controller Pod执行日志聚合命令,示例如下:

# 先确认日志字段顺序,根据你实际的日志模板调整awk的字段索引
kubectl logs -n ingress-nginx <你的Ingress Controller Pod名称> | grep '"ingress":"<目标Ingress名称>"' | awk '{recv+=$12; send+=$19} END {print "总接收流量:"recv/1024/1024" MB\n总发送流量:"send/1024/1024" MB"}'

方案2:基于Prometheus指标长期监控

如果需要持续统计、做流量趋势看板,直接用NGINX Ingress默认暴露的Prometheus指标聚合即可:

  • 接收流量统计指标:nginx_ingress_controller_request_size_bytes,按ingress、namespace标签分组求和即可得到对应Ingress的累计接收流量
  • 发送流量统计指标:nginx_ingress_controller_response_size_bytes,按ingress、namespace标签分组求和即可得到对应Ingress的累计发送流量

如果需要按时间窗口统计,使用increase函数即可,示例PromQL(统计最近1小时的流量):

# 接收流量
increase(nginx_ingress_controller_request_size_bytes{namespace="业务命名空间", ingress="目标Ingress名称"}[1h])

# 发送流量
increase(nginx_ingress_controller_response_size_bytes{namespace="业务命名空间", ingress="目标Ingress名称"}[1h])

如果集群已经部署了Prometheus+Grafana栈,直接导入官方的NGINX Ingress监控面板就能直接看到所有Ingress的实时、历史流量数据,不需要自行编写查询规则。

方案3:开启VTS模块做细粒度统计

如果需要更丰富的流量统计能力(比如按路由路径拆分、QPS关联统计、流量计费等),可以开启NGINX Ingress内置的VTS(Virtual Host Traffic Status)模块,开启后会输出更多维度的流量统计指标,满足复杂统计需求。

注意事项

不要使用节点网卡层面的流量做统计,该维度的流量包含了集群内部通信、其他业务的流量,无法精确拆分到单个Ingress的七层请求流量。

内容的提问来源于stack exchange,提问作者Quang Linh Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:39:03