使用n2disk和PF_RING构建一个(便宜的)连续数据包记录器(Part2)

连续数据包记录器是一种捕捉原始流量到磁盘上的设备,提供了一个网络历史记录的窗口,当网络事件发生时,你可以回溯到过去,并分析流量到数据包级别,以找到导致问题的确切网络活动。

n2disk是ntop套件的软件应用程序部分,能够高速捕获流量(它依赖  PF_RING  数据包捕获框架,能够提供高达100 Gbit / s的线速数据包捕获),并使用标准将流量转储到磁盘PCAP格式(由Wiresharkntopng之类的数据包分析工具使用)。永久记录网络流量,当磁盘空间满时,最旧的数据会被覆盖,以提供连续记录和最佳数据保留时间。

除了将网络数据存储到磁盘之外,n2disk还可以:

  • 在时间轴中建立索引和组织数据,以便能够在选定的时间间隔内检索与特定BPF过滤器匹配的数据包的流量。
  • 压缩数据以节省磁盘空间(如果在支持PF_RING的libpcap上编译基于pcap的应用程序,则任何与PCAP格式兼容的应用程序都可以无缝读取压缩的pcap文件)。
  • 过滤流量,最高可达L7:您可以丢弃与所选应用程序协议匹配的流量。
  • 分流流量:对于选定的应用协议(例如,加密或多媒体大象流),可以只记录通信开始的几个数据包来节省磁盘空间。
  • 切片数据包:通过切割数据包来减小数据包大小的能力(例如,最多切割到IP或TCP / UDP报头)。

在上一篇文章(第1部分)中,我们描述了如何使用n2diskPF_RING来构建一个2×10 Gbit连续数据包记录器,但是随着几年的过去,增加了新的功能,以及新的捕获和存储技术也出现了,现在是时候对其进行更新了。

网络适配器:Intel vs FPGAs

所有ntop应用程序(包括n2disk)均基于PF_RING,并且可以在商用适配器(Intel可以使用加速的Zero-Copy驱动程序)以及专用的FPGA适配器(如Napatech,Fiberblaze等)之上运行(完整列表可在PF_RING文档中找到)。

为了选择最佳的适配器,我们需要考虑几个因素,包括捕获速度,功能和价格。Intel适配器价格便宜,使用PF_RING ZC加速驱动可以提供10+ Gbps的64字节数据包捕获。FPGA适配器很昂贵(或多或少,取决于制造商),但是除了以较小的数据包大小提高捕获速度外,还提供对有用功能的支持,例如端口聚合,纳秒级时间戳,流量过滤。我们可以在一个小表中总结一下:

链路速度 / 所需功能推荐适配器
1 GbitAny adapter
10 GbitIntel (e.g. 82599/X520)
2 x 10 Gbit Aggregation / Nanosecond TimestampFPGA (Napatech, Silicom)
40/100 GbitFPGA (Napatech, Silicom)

我需要什么存储系统?

如果您需要记录1 Gbps,那么即使是一个(快速)HDD也足以满足通信吞吐量。如果需要记录10+ Gbps的数据,则需要通过使用具有许多驱动器的RAID系统来提高I / O吞吐量。在ntop上,通常在紧凑型系统(例如2U外形尺寸,最多具有24个磁盘)中使用2.5英寸10K RPM SAS HDD驱动器,或者当机架空间不是问题并且需要许多单元增加数据保留时在模块化系统中使用3.5英寸7.2 KRPM SAS HDD(在这种情况下,您需要使用能够驱动SAS扩展器的RAID控制器,该扩展器能够处理数百个磁盘)。存储系统中的更多空间意味着更长的保留时间,因此可以追溯到更早的时间以查找旧数据。

驱动器的数量,结合每个驱动器的I / O吞吐量以及RAID配置,决定了您最终能够实现的I / O吞吐量。驱动器速度取决于驱动器类型和型号,可以在下表中进行总结:

驱动类型稳定连续的 I/O
SAS/SATA HDD100-250 MB/s
SSD100-500 MB/s
NVMe (PCIe SSD)500-3000 MB/s

例如,要以10 Gbps的速度记录流量,则RAID 0需要8-10个SAS HDD,RAID 50需要10-12个磁盘。RAID控制器应至少具有1-2 GB的板载缓冲区,以便跟上10 Gbps以上速度。或者,您可以使用3-5个SSD或1-2个NVMe(PCIe SSD)驱动器。当在繁重的工作负载下需要同时进行读写时,通常会使用SSD,以避免HDD的寻道时间影响性能。请务必选择写入密集型闪存盘,以确保长时间的耐用性。

在ntop达到20 Gbps时,我们通常使用16-24个HDD。在40-100 Gbps时,您可能还需要使用多个控制器,因为大多数控制器能够承受高达35-40 Gbps的持续负载,你需要将负载分布再其中的几个控制器上。实际上,从3.2版开始,n2disk实现了多线程转储,这意味着它能够并行写入多个卷。当使用NVMe磁盘时,这也很有用,因为它们直接连接到PCIe总线,而且速度很快,但是它们不能由标准控制器驱动,因此您可以使用n2disk并行写入许多NVMe磁盘:我们已经能够使用8个写入密集型NVMe磁盘实现140 Gbps的持续吞吐量!

我需要什么CPU?

选择合适的CPU取决于几个因素。

首先是适配器型号。Intel适配器逐个传输数据包,这给PCIe总线带来了压力,因此相对于能够以“chunk”模式工作的FPGA适配器(如Napatech或Silicom)来说,提高了整体系统利用率(其他厂商如Accolade还不支持)。FPGA适配器还能够以线速聚合硬件中的流量,而对于Intel,我们需要在主机上合并数据包,并且在这种配置中很难扩展到20-25 Mpps以上。使用Intel需要一个高频(3+ GHz)的CPU。

第二个因素肯定是流量索引。您可能想索引流量以加快流量提取,这需要一些CPU内核。为了以10 Gbps的速度动态索引流量,需要1-2个专用的内核/线程(除了捕获和写入线程外)。在40 Gbps时,您可能需要4-6个索引线程。在100 Gbps时,至少需要8个索引线程。 10个线程。

简而言之,如果您需要记录10 Gbps,那么即使使用Intel适配器,一个便宜的带有4核和3+ GHz的Intel Xeon E3通常也足够了。如果您需要记录和索引20+ Gbps,则可能应该选择更昂贵的产品,例如具有12+内核和3+ GHz的Intel Xeon可扩展处理器(例如Xeon Gold 6136)。注意过去已经讨论过的内核亲和性(core affinity)和NUMA 。

它要多少钱?

市场上的连续数据包记录器是昂贵的设备,因为它们需要快速/昂贵的存储系统,而且它们通常是为高端客户设计的企业级解决方案的一部分。在ntop,我们希望以实惠的价格为所有人提供最好的技术,并且我们最近更新了价目表,降低了n2disk产品的价格(请联系我们咨询产品价格)。教育和非营利组织可以免费使用我们的商业工具。

有关n2disk配置和调整的更多信息,请参考n2disk文档

摘自Ntop,写于2019年7月11日