一、 为什么“看见”网络如此之难在传统运维中我们常犯两个错误只看机器不看连接CPU、内存正常但应用就是慢。因为网络拥塞了或者TCP重传率高了。只有宏观没有微观只知道网卡流量跑满了但不知道是哪个进程、哪个IP、甚至哪个URL把带宽吃光了。企业级网络监控的目标不仅仅是画几张漂亮的流量图而是要能回答以下问题现在的带宽占用里TCP和UDP各占多少是否存在大量的TCP重传这通常意味着网络质量差或网卡丢包是哪台服务器的哪个进程正在疯狂发包有没有异常端口在对外通信安全审计二、 基础监控SNMP与网卡流量的“前世今生”虽然SNMP简单网络管理协议有些古老但在企业内网环境中它依然是获取交换机和Linux网卡流量数据的标准方式。1. 部署 Node Exporter现代做法如果你是新建系统强烈建议放弃 Cacti/Nagios 那一套复杂的SNMP配置直接使用Prometheus Node Exporter。Node Exporter 会采集Linux内核暴露的所有指标其中网络相关的指标极其丰富。关键指标解读面试和排错常考node_network_carrier: 网卡物理连接状态1为连接0为断开。node_network_receive_bytes_total/node_network_transmit_bytes_total: 总收发字节数用于计算速率。node_network_receive_errs_total/node_network_transmit_errs_total:接收/发送错误包计数。如果这个数值持续增长说明网卡、网线或交换机端口可能硬件故障。node_network_tcp_segments_retransmitted:TCP重传段数。这是衡量网络质量的核心指标比Ping丢包更准确。2. 避坑指南监控网卡的“双工模式”很多时候网络慢不是带宽问题而是网卡协商成了半双工Half-Duplex或者百兆模式。在Linux中检查ethtool eth0 | grep -E Speed|Duplex企业规范在Zabbix或Prometheus中不仅要监控流量百分比还要监控Speed是否为1000Mb/sDuplex是否为Full。一旦降级立即告警。三、 进阶监控用 eBPF 透视“内核里的网络”这是近几年Linux网络监控最重大的变革。传统工具如netstat,top很难告诉你“数据包在内核里排队了多久”或者“某个TCP连接的延迟是多少”。1. 什么是 eBPF通俗版想象一下Linux内核是一个黑盒。以前我们要么在盒子外面抓包tcpdump要么看盒子输出的结果ss。eBPF允许我们在内核的特定路径上挂一个“探针”实时统计经过这个路径的数据包信息而且性能损耗极低。2. 实战利器BCC 与 bpftrace不需要自己写eBPF代码我们可以直接用封装好的工具集 BCCBPF Compiler Collection。场景一排查网络延迟使用tcplatency工具查看所有TCP连接的RTT往返时延/usr/share/bcc/tools/tcplatency -D 10 # 统计10秒内的TCP延迟分布如果看到延迟分布普遍偏高而应用服务器负载很低问题大概率出在网络链路上防火墙、交换机、跨地域专线。场景二排查丢包使用dropwatch或skb_drop查看内核在哪里丢包了。/usr/share/bcc/tools/dropwatch -K这对于解决“内核缓冲区满导致的丢包”问题有奇效。注意eBPF需要较新的内核推荐 4.14最好是 5.x。如果是CentOS 7内核3.10可能需要升级内核或使用特定的补丁包。四、 流量分析谁是内网的“流量怪兽”当带宽报警响起我们需要快速定位罪魁祸首。这时候iftop和nethogs是你的左膀右臂。1. 实时流量定位nethogs不同于iftop按IP统计nethogs是按进程统计的。这在多应用混部的服务器上非常重要。nethogs eth0它会直接显示 PID、用户、进程名以及实时的上传下载速率。实战技巧如果发现是java进程占用过高结合jstack或 Arthas 进一步定位具体线程如果是nginx查看访问日志。2. 连接数监控被忽视的“隐形炸弹”很多时候网卡流量没满但服务器却无法响应新请求。这通常是TCP连接数 被打满了。监控关键文件/proc/net/sockstatcat /proc/net/sockstat关注几个指标TCP: inuse: 正在使用的TCP套接字数。TCP: orphan: 无主不属于任何文件描述符的TCP连接数通常是TIME-WAIT堆积。TCP: timewait: TIME-WAIT 状态的连接数。企业级告警阈值当orphan接近net.ipv4.tcp_max_orphans时必须告警。当单台机器的 TCP 连接数超过 65535 的 70% 时需要关注。五、 可视化打造你的网络监控仪表盘数据是零散的图表才是用来决策的。我们使用Grafana 来展示 Prometheus 采集的数据。1. 必建的四个面板Panel在你的 Grafana Dashboard 中至少应该包含以下四个视图流量吞吐量 (Throughput)指标rate(node_network_receive_bytes_total[5m])展示按服务器分组的流量曲线。作用发现流量突增或突降。TCP 重传率 (Retransmission Rate)指标rate(node_network_tcp_segments_retransmitted[5m]) / rate(node_network_tcp_segments_total[5m])展示百分比曲线。作用判断网络质量的黄金指标。正常情况下应低于 0.1%。如果飙升说明网络拥堵或硬件故障。Socket 状态分布 (Socket States)指标node_netstat_Tcp_CurrEstab(当前建立连接),node_sockstat_TCP_tw(TIME_WAIT)展示Stacked Bar堆叠柱状图。作用观察连接池是否健康是否有大量等待释放的连接。DNS 查询耗时 (DNS Latency)指标如果使用dnsmasq或 CoreDNS采集其 Query Time。作用很多应用慢是因为DNS解析慢而不是网络传输慢。2. 告警策略不要等网卡打满了才告警。建议设置多级告警Warning: 流量达到带宽上限的 70%或 TCP 重传率 0.5%。Critical: 流量达到带宽上限的 90%或 TCP 重传率 1%或出现Send-Q持续堆积。六、 安全视角网络监控也是安全哨兵网络监控数据往往是入侵检测的第一信号。1. 异常端口监控编写一个简单的脚本配合ss -tulnp定期检查是否有非白名单的端口处于 LISTEN 状态。# 白名单端口 ALLOWED_PORTS(22 80 443 3306) # 当前监听端口 CURRENT_PORTS$(ss -tuln | awk NR1 {print $5} | cut -d: -f2 | sort -u) # 对比逻辑...一旦发现6666、4444或其他可疑端口立即触发高危告警。2. 异常外联监控监控服务器的出口流量。如果一台Web服务器突然开始向公网的25端口邮件或大量的随机高位端口发包极有可能它被植入了木马正在扫描外网或发送垃圾邮件。七、 总结从“看热闹”到“看门道”网络监控不是为了画几张花哨的图而是为了量化系统的不确定性。回顾一下今天的要点基础要稳用好 Prometheus Node Exporter重点关注TCP重传率 和错误包。内核要透学会使用 eBPF/BCC 工具如tcplatency透视内核网络栈的性能瓶颈。定位要快掌握nethogs和ss在故障发生时秒级定位进程和连接。视图要全Grafana 仪表盘要包含流量、重传、连接数和安全审计四个维度。当你能从一堆监控数据中一眼看出是交换机的光模块衰减导致TCP重传还是Java程序的HTTP连接池泄漏导致Socket耗尽时你就真正拥有了企业级Linux网络管理的“上帝视角”。
别让监控盲了眼:构建企业级Linux网络“上帝视角”
发布时间:2026/7/2 1:27:37
一、 为什么“看见”网络如此之难在传统运维中我们常犯两个错误只看机器不看连接CPU、内存正常但应用就是慢。因为网络拥塞了或者TCP重传率高了。只有宏观没有微观只知道网卡流量跑满了但不知道是哪个进程、哪个IP、甚至哪个URL把带宽吃光了。企业级网络监控的目标不仅仅是画几张漂亮的流量图而是要能回答以下问题现在的带宽占用里TCP和UDP各占多少是否存在大量的TCP重传这通常意味着网络质量差或网卡丢包是哪台服务器的哪个进程正在疯狂发包有没有异常端口在对外通信安全审计二、 基础监控SNMP与网卡流量的“前世今生”虽然SNMP简单网络管理协议有些古老但在企业内网环境中它依然是获取交换机和Linux网卡流量数据的标准方式。1. 部署 Node Exporter现代做法如果你是新建系统强烈建议放弃 Cacti/Nagios 那一套复杂的SNMP配置直接使用Prometheus Node Exporter。Node Exporter 会采集Linux内核暴露的所有指标其中网络相关的指标极其丰富。关键指标解读面试和排错常考node_network_carrier: 网卡物理连接状态1为连接0为断开。node_network_receive_bytes_total/node_network_transmit_bytes_total: 总收发字节数用于计算速率。node_network_receive_errs_total/node_network_transmit_errs_total:接收/发送错误包计数。如果这个数值持续增长说明网卡、网线或交换机端口可能硬件故障。node_network_tcp_segments_retransmitted:TCP重传段数。这是衡量网络质量的核心指标比Ping丢包更准确。2. 避坑指南监控网卡的“双工模式”很多时候网络慢不是带宽问题而是网卡协商成了半双工Half-Duplex或者百兆模式。在Linux中检查ethtool eth0 | grep -E Speed|Duplex企业规范在Zabbix或Prometheus中不仅要监控流量百分比还要监控Speed是否为1000Mb/sDuplex是否为Full。一旦降级立即告警。三、 进阶监控用 eBPF 透视“内核里的网络”这是近几年Linux网络监控最重大的变革。传统工具如netstat,top很难告诉你“数据包在内核里排队了多久”或者“某个TCP连接的延迟是多少”。1. 什么是 eBPF通俗版想象一下Linux内核是一个黑盒。以前我们要么在盒子外面抓包tcpdump要么看盒子输出的结果ss。eBPF允许我们在内核的特定路径上挂一个“探针”实时统计经过这个路径的数据包信息而且性能损耗极低。2. 实战利器BCC 与 bpftrace不需要自己写eBPF代码我们可以直接用封装好的工具集 BCCBPF Compiler Collection。场景一排查网络延迟使用tcplatency工具查看所有TCP连接的RTT往返时延/usr/share/bcc/tools/tcplatency -D 10 # 统计10秒内的TCP延迟分布如果看到延迟分布普遍偏高而应用服务器负载很低问题大概率出在网络链路上防火墙、交换机、跨地域专线。场景二排查丢包使用dropwatch或skb_drop查看内核在哪里丢包了。/usr/share/bcc/tools/dropwatch -K这对于解决“内核缓冲区满导致的丢包”问题有奇效。注意eBPF需要较新的内核推荐 4.14最好是 5.x。如果是CentOS 7内核3.10可能需要升级内核或使用特定的补丁包。四、 流量分析谁是内网的“流量怪兽”当带宽报警响起我们需要快速定位罪魁祸首。这时候iftop和nethogs是你的左膀右臂。1. 实时流量定位nethogs不同于iftop按IP统计nethogs是按进程统计的。这在多应用混部的服务器上非常重要。nethogs eth0它会直接显示 PID、用户、进程名以及实时的上传下载速率。实战技巧如果发现是java进程占用过高结合jstack或 Arthas 进一步定位具体线程如果是nginx查看访问日志。2. 连接数监控被忽视的“隐形炸弹”很多时候网卡流量没满但服务器却无法响应新请求。这通常是TCP连接数 被打满了。监控关键文件/proc/net/sockstatcat /proc/net/sockstat关注几个指标TCP: inuse: 正在使用的TCP套接字数。TCP: orphan: 无主不属于任何文件描述符的TCP连接数通常是TIME-WAIT堆积。TCP: timewait: TIME-WAIT 状态的连接数。企业级告警阈值当orphan接近net.ipv4.tcp_max_orphans时必须告警。当单台机器的 TCP 连接数超过 65535 的 70% 时需要关注。五、 可视化打造你的网络监控仪表盘数据是零散的图表才是用来决策的。我们使用Grafana 来展示 Prometheus 采集的数据。1. 必建的四个面板Panel在你的 Grafana Dashboard 中至少应该包含以下四个视图流量吞吐量 (Throughput)指标rate(node_network_receive_bytes_total[5m])展示按服务器分组的流量曲线。作用发现流量突增或突降。TCP 重传率 (Retransmission Rate)指标rate(node_network_tcp_segments_retransmitted[5m]) / rate(node_network_tcp_segments_total[5m])展示百分比曲线。作用判断网络质量的黄金指标。正常情况下应低于 0.1%。如果飙升说明网络拥堵或硬件故障。Socket 状态分布 (Socket States)指标node_netstat_Tcp_CurrEstab(当前建立连接),node_sockstat_TCP_tw(TIME_WAIT)展示Stacked Bar堆叠柱状图。作用观察连接池是否健康是否有大量等待释放的连接。DNS 查询耗时 (DNS Latency)指标如果使用dnsmasq或 CoreDNS采集其 Query Time。作用很多应用慢是因为DNS解析慢而不是网络传输慢。2. 告警策略不要等网卡打满了才告警。建议设置多级告警Warning: 流量达到带宽上限的 70%或 TCP 重传率 0.5%。Critical: 流量达到带宽上限的 90%或 TCP 重传率 1%或出现Send-Q持续堆积。六、 安全视角网络监控也是安全哨兵网络监控数据往往是入侵检测的第一信号。1. 异常端口监控编写一个简单的脚本配合ss -tulnp定期检查是否有非白名单的端口处于 LISTEN 状态。# 白名单端口 ALLOWED_PORTS(22 80 443 3306) # 当前监听端口 CURRENT_PORTS$(ss -tuln | awk NR1 {print $5} | cut -d: -f2 | sort -u) # 对比逻辑...一旦发现6666、4444或其他可疑端口立即触发高危告警。2. 异常外联监控监控服务器的出口流量。如果一台Web服务器突然开始向公网的25端口邮件或大量的随机高位端口发包极有可能它被植入了木马正在扫描外网或发送垃圾邮件。七、 总结从“看热闹”到“看门道”网络监控不是为了画几张花哨的图而是为了量化系统的不确定性。回顾一下今天的要点基础要稳用好 Prometheus Node Exporter重点关注TCP重传率 和错误包。内核要透学会使用 eBPF/BCC 工具如tcplatency透视内核网络栈的性能瓶颈。定位要快掌握nethogs和ss在故障发生时秒级定位进程和连接。视图要全Grafana 仪表盘要包含流量、重传、连接数和安全审计四个维度。当你能从一堆监控数据中一眼看出是交换机的光模块衰减导致TCP重传还是Java程序的HTTP连接池泄漏导致Socket耗尽时你就真正拥有了企业级Linux网络管理的“上帝视角”。