ntopng对时间序列和流量的磁盘要求

先验估计ntopng在生产环境中使用的空间是进行调配存储的基础。本篇文章中,我们将估算ntopng存储时间序列和流量所使用的空间。

时间序列

  • ntopng生成的时间序列的数量几乎完全取决于本地主机的数量。生成的其他时间序列,包括接口或SNMP设备的时间序列,通常比为本地主机生成的时间序列少几个数量级。因此,在进行计算时,只考虑本地主机的时间序列是安全的
  • 对于每个本地主机,ntopng为流量生成一个时间序列和一个额外的第七层应用协议时间序列,每个应用协议一个。这些时间序列可以从首选项中禁用,但显然我们需要启用它们才能写这篇文章。
  • 在本节的其余部分中,我们将讨论ntopng存储时间序列所需的空间,它是本地主机数量的函数,对于RRDS和InfluxDB都是如此。您可以从ntopng首选项页面选择使用RRDS或InfluxDB。感兴趣的读者请参阅附录,了解这些数字是如何计算出来的。

RRD

RRD文件的大小是固定的,这意味着它们不会随着新数据点的到来而增长。Ntopng为每个时间序列创建一个RRD。为每个本地主机存储数据所需的空间取决于启用的时序,并在下表中突出显示。

已启用的时间序列

磁盘空间

Host Timeseries “Light” (Default)

92 K / Local Host (2 RRDs / host)

Host  Timeseries”Fulland”Layer-7 Applications “None”

1.3 MB / Local Host (Approx. 25 RRDs / host)

Host Timeserie“Full”and Layer-7 Applications “Per Category”

1.6MB / Local Host (Approx. 30 RRDs / host)

Host Timeseries ”Full” and Layer-7 Applications “Per Application”

Max. 13.8 MB / Local Host
(50 K * 250 applications + 1.3 MB)

Host Timeserie“Full”and Layer-7 Applications “Both”

Max. 14.1 MB / Local Host
(50K * 250 applications + 1.6 MB)

InfluxDB

与RRD相反,InfluxDB时间序列的大小随着时间的推移而增长。因此,下面的估计不仅是本地主机的功能,也是监测天数的功能。此外,由于InfluxDB允许选择监控分辨率,我们在10秒和60秒两种不同的分辨率下给出了所需的空间。

InfluxDB

10秒的分辨率

60秒的分辨率

时间序列存储

450 KB / Local Host / Day

75 KB / Local Host / Day

流量

正如我们即将宣布的那样,我们已经设计并实现了一个用于存储流量的高速/容量专用数据库。使用此数据库,我们能够每秒将数万个流量转储到磁盘。下表显示了用于存储每个流的空间。

Flow Index

 

Flows storage

11 Bytes / Flow

*上述数值是基于IPv4流量和一些IPv6流量的平均值。如果你的流量主要是IPv6流量,并且流量中存储      了较长的元数据字符串,那么它可能会增加。

附录

在本附录中,我们将讨论为计算上述估计值而进行的数学运算。

  • InfluxDB

为了对InfluxDB进行估计,我们考虑了在实际环境中运行的ntopng,监测一个平均流量为444.84Mbps的SPAN端口,平均有22,323台主机,包括大约4000台本地主机。

数据的获取方式如下:

※InfluxDB存储:154.14 GB,如ntopng运行时状态页所示。

※监测的时间:3个月,如从ntopng界面统计页面获得。

数学结果如下:

※KB / Local Host / Day @ 10s = 154.14 GB / 3 Months / 4,000 local hosts = ((154.14 * 1024 * 1024) / 4000 / 90) = 450 KB / Local Host / Day

※KB / Local Host / Day @ 60s = (KB / Local Host / Day @ 10s) / 6 = 75 KB / Local Host / Day

  • RRD

为了估算RRD,我们使用了一个运行在从nProbe收集sFlow的生产系统中的ntopng,该系统已经看到了大约2000个本地主机,并启用了第7层时间序列生成。

数据的获取方式如下:

※本地主机的数量:

/var/lib/ntopng/0/rrd $ find . -name “bytes.rrd” | wc -l = 1,989

※RRD的数量:

/var/lib/ntopng/0/rrd $ find . -name “*.rrd” | wc -l= 25,506

※RRD的总大小:/var/lib/ntopng/0/ $ du -hs rrd/= 989M

数学公式如下:

989 M / 1,989 Local Hosts = (989 / 1989) * 1024 = 500 KB / Local Host

  • 流量指数

流量指数估算是使用与InfluxDB相同的主机完成的。为了计算流数据库中存储的每个流使用的字节数,我们进行了以下计算:

①首先,我们计算了一个小时内的流量数量:

1.

$ ./nindex -d /var/lib/ntopng/0/flows/ -b 1544713200 -e 1544716800 -l 0

2.

14/Dec/2018 21:29:05 [nindex.cpp:346] Search time range [Thu Dec 13 15:00:00 2018 -> Thu Dec 13 16:00:00 2018]

3.

14/Dec/2018 21:29:05 [nindex.cpp:356] Performing record count (-l 0)

4.

14/Dec/2018 21:29:05 [nindex.cpp:393] Query completed in 2.1 msec, with 16’962’614 hits returned

 

②然后,我们计算了用于存储该特定小时的数据的磁盘空间:

1.

$ du -hs /var/lib/ntopng/0/flows/2018/12/13/15

2.

175M /var/lib/ntopng/0/flows/2018/12/13/15

③最后,我们得到的:

Bytes / Flow as = 175M / 16962614 = (175 * 1024 * 1024) / 16962614 = 11 B / Flow.

*请注意,我们在2毫秒内扫描了1,700万条记录。这对使用SATA驱动器同时ntopng正在写入的低端系统来说并不是太差。