艾体宝干货 | 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流量,并且流量中存储 了较长的元数据字符串,那么它可能会增加。
附录
在本附录中,我们将讨论为计算上述估计值而进行的数学运算。
1、InfluxDB
数据的获取方式如下:
※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
2、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
3、流量指数
流量指数估算是使用与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正在写入的低端系统来说并不是太差。