连续数据包记录器是一种捕捉原始流量到磁盘上的设备,提供了一个网络历史记录的窗口,当网络事件发生时,你可以回溯到过去,并分析流量到数据包级别,以找到导致问题的确切网络活动。
n2disk是ntop套件的软件应用程序部分,能够高速捕获流量(它依赖 PF_RING 数据包捕获框架,能够提供高达100 Gbit / s的线速数据包捕获),并使用标准将流量转储到磁盘PCAP格式(由Wireshark和ntopng之类的数据包分析工具使用)。永久记录网络流量,当磁盘空间满时,最旧的数据会被覆盖,以提供连续记录和最佳数据保留时间。
除了将网络数据存储到磁盘之外,n2disk还可以:
- 在时间轴中建立索引和组织数据,以便能够在选定的时间间隔内检索与特定BPF过滤器匹配的数据包的流量。
- 压缩数据以节省磁盘空间(如果在支持PF_RING的libpcap上编译基于pcap的应用程序,则任何与PCAP格式兼容的应用程序都可以无缝读取压缩的pcap文件)。
- 过滤流量,最高可达L7:您可以丢弃与所选应用程序协议匹配的流量。
- 分流流量:对于选定的应用协议(例如,加密或多媒体大象流),可以只记录通信开始的几个数据包来节省磁盘空间。
- 切片数据包:通过切割数据包来减小数据包大小的能力(例如,最多切割到IP或TCP / UDP报头)。
在上一篇文章(第1部分)中,我们描述了如何使用n2disk和PF_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 Gbit | Any adapter |
10 Gbit | Intel (e.g. 82599/X520) |
2 x 10 Gbit Aggregation / Nanosecond Timestamp | FPGA (Napatech, Silicom) |
40/100 Gbit | FPGA (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 HDD | 100-250 MB/s |
SSD | 100-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,写于2019年7月11日