netstat 是内核网络状态的快照式查看工具,非采集服务;需通过 Node Exporter 或定制脚本将其输出转化为时序指标接入 Prometheus+Grafana,避免高频轮询。

netstat 本身不是采集服务,而是内核网络状态的快照式查看工具;要实现系统级网络性能数据的持续采集与监控集成,需将其输出转化为可观测指标,并接入 Prometheus + Grafana 链路,或结合脚本定时解析后写入时序数据库。
明确 netstat 的定位与局限
netstat 读取的是 /proc/net/ 下的静态文件(如 tcp、udp、snmp),反映某一时刻的连接、协议栈、接口统计等状态。它不主动采集、不存储历史、无时间序列能力,也不适合高频调用(可能引发内核开销)。因此不能直接用于“监控”,只能作为诊断辅助或指标源之一。
- 常用命令如
netstat -s输出 TCP/UDP 全局统计(重传、失败连接、内存分配失败等),是发现协议层异常的关键入口 -
netstat -an可识别连接堆积(如大量 TIME_WAIT、CLOSE_WAIT)、端口占用冲突、监听缺失等问题 -
netstat -i显示各网卡收发包、错误、丢弃计数,对应 Prometheus 中node_network_*指标底层来源之一
将 netstat 数据纳入监控体系的可行路径
有两类主流做法:一是通过 Node Exporter 自动暴露 netstat 类指标;二是定制脚本按需提取并上报。
-
推荐方式:启用 Node Exporter 的 --collector.netstat
该 collector 默认开启,会解析
/proc/net/snmp和/proc/net/netstat,生成如node_netstat_Tcp_CurrEstab、node_netstat_TcpRetransSegs、node_netstat_Udp_InErrors等指标,直接被 Prometheus 抓取 -
补充方式:Shell + curl 或 textfile collector
对特定场景(如检查某端口连接数阈值),可用
netstat -ant | grep ':8080' | wc -l定时执行,结果写入/var/lib/node-exporter/textfile-collector/port8080.prom,由 textfile collector 加载为自定义指标 -
避免直接轮询 netstat 命令做监控
高频执行
netstat -an会产生显著 procfs 开销,且文本解析不稳定;应优先依赖 /proc 接口或已有 exporter,而非 shell 封装
关键指标选取与告警建议
netstat 提供的原始数据需聚焦真正影响服务可用性与性能的维度,而非罗列全部字段。
-
TCP 连接健康度:关注
node_netstat_TcpAttemptFails(连接尝试失败)、node_netstat_TcpEstabResets(异常断连)、node_netstat_TcpCurrEstab(当前 ESTABLISHED 数)是否突增或长期高位 -
TIME_WAIT 与资源耗尽风险:结合
node_netstat_TcpTimeWait和net.ipv4.ip_local_port_range大小,判断是否接近端口耗尽临界点 -
UDP 错误率:
rate(node_netstat_UdpInErrors[5m])持续 > 0 表明接收侧丢包或校验失败,需查网卡或应用层处理逻辑 -
Recv-Q/Send-Q 异常:虽 netstat 输出中可见,但 Prometheus 不直接暴露该字段;可通过
ss -i或 eBPF 工具(如 bpftrace)捕获队列堆积,更准确反映应用处理瓶颈
与现代替代方案协同使用
netstat 已逐步被 ss(socket statistics)取代,因其基于更高效的 netlink 接口,性能更好、输出更结构化。生产环境建议:
- 诊断时用
ss -tuln替代netstat -tuln,响应更快、更可靠 - 脚本采集若必须用命令行,优先
ss -s(等效于 netstat -s)+awk解析,减少兼容性问题 - Prometheus 生态中,
node_exporter同时兼容 /proc/net/snmp 和 ss 的输出逻辑,无需额外适配


















