本文目录导读:

- 监控设备本身(主机)的网络状态
- 监控网络设备(路由器、交换机、防火墙)
- 监控网络连通性与延迟
- 监控网络流量流向(瓶颈分析)
- 监控网络带宽使用率(特定流量重放)
- 总结:选择哪个方案?
- 实际配置示例(监控服务器网络带宽)
- 特别提醒:Prometheus 不适合全量流量分析
Prometheus 本身是一个拉取(Pull)模式的时间序列数据库,它不直接像 NPM(Network Performance Monitor)那样抓包分析网络流量,要监控网络指标,通常需要依赖 Exporter 来采集数据,由 Prometheus 拉取。
以下是使用 Prometheus 监控网络指标的几种核心方式及其适用场景:
监控设备本身(主机)的网络状态
这是最常见的需求,监控服务器的网卡流量、带宽、丢包、错误包等。
推荐工具:node_exporter
- 原理:
node_exporter读取 Linux/proc/net/dev等文件系统,提供丰富的网络指标。 - 关键 Metrics(指标):
node_network_receive_bytes_total:接收字节数(用于计算带宽)。node_network_transmit_bytes_total:发送字节数。node_network_receive_drop_total:接收丢包。node_network_transmit_drop_total:发送丢包。node_network_receive_errors_total:接收错误。node_network_transmit_errors_total:发送错误。
- 常用 PromQL 查询示例:
- 计算网卡实时带宽(bps):
rate(node_network_receive_bytes_total{device="eth0"}[1m]) * 8 - 计算丢包率:
rate(node_network_receive_drop_total{device="eth0"}[1m]) / rate(node_network_receive_packets_total{device="eth0"}[1m])
- 计算网卡实时带宽(bps):
- 优点:官方维护,部署简单,覆盖基础需求。
- 缺点:只能看到主机层面的统计,无法看到网络路径或应用层流量内容。
监控网络设备(路由器、交换机、防火墙)
网络设备通常运行 SNMP 协议,Prometheus 无法直接对接 SNMP,需要中间件转换。
推荐工具:snmp_exporter
- 原理:
snmp_exporter接收 Prometheus 的 HTTP 请求,然后去轮询设备的 SNMP 接口(通常是 MIB 库),将 SNMP 数据转换为 Prometheus 指标。 - 配置方法:
- 生成配置文件,定义要抓取哪些 OID(MIB 树中的节点,即指标ID)。
- 在 Prometheus 的
scrape_config中配置snmp_exporter的地址,并传递目标设备 IP 和社区字符串。
- 监控指标:
ifHCInOctets、ifHCOutOctets(64位计数器,避免数值溢出)。ifInErrors、ifOutErrors。ifOperStatus(端口状态:up/down)。
- 适用场景:监控企业级交换机、路由器、防火墙的端口流量及状态。
监控网络连通性与延迟
监控从 Prometheus 服务器(或特定 Probe 节点)到目标服务的网络质量。
推荐工具:blackbox_exporter
- 原理:这是一个探针 Exporter,可以执行 ICMP(ping)、TCP、HTTP、DNS 等探测,并将结果暴露给 Prometheus。
- 关键指标:
probe_success:探测是否成功(1 成功,0 失败)。probe_duration_seconds:探测耗时(类似 Ping 的延迟)。probe_http_status_code:HTTP 状态码。probe_ssl_earliest_cert_expiry:证书过期时间。
- 典型用法:使用
up模块监控网站,使用icmp模块监控核心路由器的延迟。
监控网络流量流向(瓶颈分析)
如果想分析哪台机器在跟谁通信、网络流量的构成(类似 NetFlow),以上工具均无法满足,这需要更复杂的流数据采集。
推荐工具组合:sflow_exporter / ipfix 或 Elasticsearch + Logstash
- 方案 A:GoFlow + Prometheus
- GoFlow 是一个 NetFlow/IPFIX/sFlow 收集器,它能解析网络设备发送的流数据,并直接生成 Prometheus 指标(如 bytes per source/destination)。
- 缺点:流量大时,CPU 和 Prometheus 指标基数(Cardinality)会急剧膨胀,需要注意。
- 方案 B:Elastic Stack(不直接 Prometheus)
- 使用 Packetbeat 或 Logstash 抓取 sFlow,存入 Elasticsearch,Prometheus 可以通过
elasticsearch_exporter获取一些聚合指标,但无法像 PromQL 那样分析流详情。
- 使用 Packetbeat 或 Logstash 抓取 sFlow,存入 Elasticsearch,Prometheus 可以通过
监控网络带宽使用率(特定流量重放)
推荐工具:iperf3_exporter
- 用途:主动生成流量,测试两点间的实际最大带宽。
- 原理:一端运行 iperf3 服务端,另一端运行客户端并配合 exporter,输出测速结果作为指标。
- 适用:带宽基准测试,或 SLA 验证,不适合 24 小时生产监控。
选择哪个方案?
| 监控目标 | 推荐工具 | 典型指标 | 复杂度 |
|---|---|---|---|
| 主机网卡流量、丢包 | node_exporter |
bytes, drop, errors | ⭐ 低 |
| 交换机/路由器端口 | snmp_exporter |
ifHCInOctets, ifOperStatus | ⭐⭐ 中 |
| 连通性、延迟、证书 | blackbox_exporter |
probe_success, probe_duration_seconds | ⭐ 低 |
| 网络流量流向分析 | GoFlow / Elastic + Packetbeat | src_ip, dst_ip, bytes | ⭐⭐⭐ 高 |
| 主动带宽测速 | iperf3_exporter | Mbps, jitter | ⭐⭐ 中 |
实际配置示例(监控服务器网络带宽)
如果你已经部署了 node_exporter,可以在 Prometheus 配置文件中添加 Job:
scrape_configs:
- job_name: 'node_network'
static_configs:
- targets: ['your_server_ip:9100']
# 可以只拉取网络相关指标,减少数据量
params:
collect[]:
- 'cpu'
- 'network'
然后在 Grafana 中配置面板,公式如下(获取 5 分钟内的平均上行带宽):
rate(node_network_transmit_bytes_total{device=~"eth0|ens.*"}[5m]) * 8
特别提醒:Prometheus 不适合全量流量分析
如果你需要像 Wireshark(抓包工具)那样看到每个会话的 HTTP 请求详情、每个包的负载,或者需要持续几周的流量历史溯源,Prometheus 不是合适的选择,建议使用:
- Elasticsearch + Packetbeat(全量存储,搜索能力强)。
- Grafana + Loki(仅日志,不完整)。
- Cribl / Splunk(企业级数据管道)。
Prometheus 的优势在于实时告警和趋势分析(如“最近5分钟流量超过阈值”或“网络错误率突然升高”)。