大规模网络监控工具集-nettools
大规模数据中心的网络可靠性一直是工程领域的难题。当交换机、路由器、光模块在高速率流量下出现偶发性故障时,传统的 ping 或 traceroute 往往无法捕捉那些瞬时、间歇性发生的问题 —— 比如微秒级的丢包、比特翻转导致的随机错误,或者 ECMP 负载均衡路径上某个特定链路的降级。百度团队开源的 nettools,正是针对这类 "黑盒" 监控场景构建的一套物理网络诊断工具包,包括:bitflip:用于检测大规模物理网络中的丢包和比特翻转错误。
baize:配置驱动的网络质量持续监控工具,适合长期部署场景。
lidar:TCP SYN 网络可达性探测工具,无需在远端部署任何软件。
nettools 基于 Go 语言开发(占比97%),代码结构清晰,依赖简洁,适合集成到现有的监控告警体系中。对于大规模数据中心运营者而言,这套工具提供了一种在生产环境中快速部署、长期运行的网络质量监控方案 —— 不需要复杂的预配置,客户端首次发送数据包时服务端会自动注册,无需手动添加被监控对象。采用 MIT 许可证。
其包含三个核心工具,均由百度内部实际部署的生产环境驱动开发。

首先是 bitflip,系高频 UDP 探测工具,通过在客户端与服务端之间持续发送大量 UDP 数据包来检测物理网络的丢包和比特翻转错误。与传统 ping 不同,bitflip 支持单向检测:服务端可以独立统计从客户端到服务端的正向路径丢包情况,客户端则统计双向往返路径的总体情况。通过对比两端数据,运维人员可以精准定位丢包发生在正向路径还是回程路径,从而将故障范围缩小到具体的光模块或光纤链路。
工作原理: 客户端每秒向服务端发送大量 UDP 报文,服务端原样回显。双端独立检测:
1、Client 端(往返检测): 检测全链路往返丢包和 bitflip。若报文在任一方向丢失,计为丢包;若返回报文内容与预期不符,记录发生 bitflip 的五元组。
2、Server 端(单向检测): 仅检测 Client→Server 方向的丢包和 bitflip。每个报文携带 Client 上一时间窗口的实际发送计数和起始端口对,Server 据此计算单向丢包率并还原该窗口的全部端口对——实现单向丢包五元组定位,无需时钟同步或跟踪 Client 状态。Server 收到未知 Client 的第一个包时自动创建统计实例,无需预配置 -c。
通过对比 Client 端和 Server 端的丢包率,可判断丢包发生在正向路径(Client→Server)还是回程路径(Server→Client)。
bitflip 的检测逻辑设计颇为巧妙。客户端发送的每个 UDP 数据包都包含 4 种盐值模式(0xFF、0x00、0x5A、以及 0xAAAA/0x5555 交替模式),这些填充数据用于检测比特翻转。如果接收方发现特定字节被翻转,就能定位到物理层的硬件故障;而服务端采用了无状态设计:每个数据包都携带上一个时间窗口的发送计数和起止端口信息,服务端通过确定性算法还原完整的端口对集合,无需维护任何客户端状态即可实现按五元组维度的丢包统计。这种设计让 bitflip 在面对大规模集群时不会因为状态存储而成为瓶颈。bitflip6 是 bitflip 的 IPv6 版本,功能完全一致,只是将地址族替换为 IPv6。对于同时管理 IPv4 和 IPv6 双栈数据中心的企业,这两套工具可以并行部署,统一收集数据。
第二个工具 baize 则面向长期运行的连续监控场景。这是一个配置驱动的守护进程,可以同时以客户端和服务端角色运行。baize 使用 JSON 配置文件管理所有参数,内置日志轮转和过期清理机制,支持 Go pprof 进行运行时性能分析,还可以通过 SIGINT/SIGTERM 实现优雅关闭。百度内部版本还支持从数据库定期拉取配置并推送数据到 Kafka 进行聚合,开源版本则简化为纯文件驱动,以日志为默认输出。
与 bitflip 的命令行参数模式不同,baize 使用 JSON 配置文件,支持在同一进程中同时运行 Client 和 Server。
核心特性:
1、配置驱动: 通过 JSON 配置文件管理所有参数,便于自动化部署。
2、单进程双角色: 支持同一进程同时运行 Client 和 Server。
3、日志轮转: 内置按日期轮转的日志系统,自动清理过期日志文件,symlink 指向最新日志。
4、pprof 集成: 内置 Go pprof HTTP 服务,方便运行时性能分析。
5、优雅退出: 监听 SIGINT/SIGTERM 信号,优雅关闭所有 goroutine。
百度物理网络内部使用的 baize 工具既支持配置文件,也支持定时拉取数据库节点的配置数据,开源版做了简化,只支持配置文件。同时内部版还会将数据推送到 Kafka 中供聚合程序处理,开源版默认输出到日志中,但已提供了接口可以各种实现。
使用场景
1、集群间高频探测:大规模集群间的网络质量持续监控,高频探测(默认 5000 pps)快速暴露间歇性丢包,多端口覆盖 ECMP 路径定位具体故障链路。
2、LCC 机房探测:跨 LCC 机房的网络质量监测,配置驱动便于批量部署到多机房节点。
3、ADC/DC 网络改造监控:网络设备割接、升级期间持续监控,改造前后质量对比量化改造效果,自动检测改造引入的丢包和改包问题。
4、专线监控:运营商专线质量持续监测,专线丢包、延迟异常实时告警,为 SLA 评估提供数据支撑。
5、回切验证:故障恢复后流量回切的网络质量验证,确认回切路径无丢包、无 bitflip,对比回切前后丢包率变化。
6、临时点对点监控:故障排查时的临时端到端探测,最小配置即可启动(仅需双方 IP),验证后可快速停止。
从应用场景看,baize 覆盖了数据中心运营中的几类典型需求:集群间高频探测用于快速暴露间歇性丢包,尤其适合 ECMP 多路径场景下精确定位故障链路;跨 LCC 数据中心探测用于监控广域网质量;设备割接期间的连续监控用于量化变更对网络质量的影响;专线监控用于实时告警和 SLA 评估;以及故障恢复后的路径验证,用于确认回切后无新的丢包或比特翻转错误。
lidar是TCP SYN 网络可达性探测工具。通过发送原始 TCP SYN 报文并分析响应来判定目标主机和端口的网络状态,无需在远端部署任何软件。利用目标主机内核 TCP 协议栈自动响应 SYN 报文的特性,只需目标 IP 和端口即可探测。
工作原理:lidar 通过 raw socket 构造 TCP SYN 报文发送到目标 IP,通过 BPF 设备(macOS)或 raw socket(Linux)接收响应。内核 TCP 协议栈不会处理这些报文,因此不会影响系统已有的 TCP 连接。
核心特性:
1、无需服务端: 只需目标 IP 和端口,无需在远端安装任何软件。
2、精准分类: 区分 SYN-ACK(端口开放)、RST(端口关闭/拒绝)、Timeout(不可达/丢包)三种状态。
3、源端口轮转: 自动轮转源端口覆盖多条 ECMP 路径,可配置端口范围。
4、速率控制: 内置令牌桶限速,精确控制探测频率。
5、多目标并行: 支持逗号分隔多 IP,每个目标独立统计。
最新版本:0.2
项目主页:https://github.com/baidu/nettools