mmap 可以在 nagios rrd 文件上生成大量文字吗?

Could mmap generate huge writing on nagios rrd files?

检查存储使用问题我发现 nagios 生成大量文件写入。在这个问题之后,我通过 strace

检查了 centOS 6.8 上的系统调用
#strace -f -p $nagiosServicePID

[pid 32544] open("/opt/nagios/pnp/var/perfdata/sw-int02/If_GigabitEthernet1_0_29.rrd", O_RDWR) = 5
[pid 32544] fstat(5, {st_mode=S_IFREG|0644, st_size=4217672, ...}) = 0
[pid 32544] fadvise64(5, 0, 0, POSIX_FADV_RANDOM) = 0
[pid 32544] mmap(NULL, 4217672, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f252fc3c000
[pid 32544] madvise(0x7f252fc3c000, 4217672, MADV_RANDOM) = 0
[pid 32544] madvise(0x7f252fc3c000, 128, MADV_WILLNEED) = 0
[pid 32544] madvise(0x7f252fc3c000, 1320, MADV_WILLNEED) = 0
[pid 32544] madvise(0x7f252fc3c000, 1440, MADV_WILLNEED) = 0
[pid 32544] madvise(0x7f252fc3c000, 16, MADV_WILLNEED) = 0
[pid 32544] fcntl(5, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
[pid 32544] msync(0x7f252fc3c000, 4217672, MS_ASYNC) = 0
[pid 32544] munmap(0x7f252fc3c000, 4217672) = 0
[pid 32544] close(5)                    = 0

它建议我 nagios 打开 rrd 文件,写入内存映射并将该内存映射同步回磁盘。 我很担心即使 rrd 文件修改了 4 个字节,整个 rrd 文件也会被重写到磁盘。它简单地杀死了昂贵的 SSD。

会不会是写这么大的盘的原因?

是否可以使用 nagios 以某种方式减少磁盘写入?

您使用的 PNP 看起来像,这意味着写入 RRD 文件的实际文件在 process_perfdata.pl 中,而不是 Nagios 本身。执行写入的函数称为 data2rrd。你问的本质上是 RRDtool 的限制。

如果您觉得写这篇文章很费钱,您可能想看看设置 RRDcached。 RRDcached 将记录所有需要对特定目录中的 RRD 文件进行的写入,然后以指定的时间间隔同时更新它们。

您还可以确保您有足够的缓冲区高速缓存,以便所有 RRD 文件块基本上都在内存中更新,并且对磁盘的更改不那么零星。您可以通过确保机器有足够的可用内存来做到这一点。

另外,您可以调整您的 RRD 文件(或 PNP4Nagios - 我们稍后会介绍)以存储更少的信息,从而使它们的整体大小更小一些。这里的权衡是你最终会得到更少的历史性能数据。这对您来说可能是问题,也可能不是问题。

您可以通过查看 /usr/local/nagios/etc/pnp/rra.cfg/usr/local/nagios/etc/pnp/process_perfdata.cfg 来调整 PNP。那就是这些文件在我的系统上的位置,您的情况可能会有所不同。

最后:确保您的系统使用的是最新版本的 RRDtool。如果您通过 yumapt 安装,它可能有点过时了。我强烈建议从源代码编译,因为多年来已经找到了许多性能改进和错误修复的方法。

您可以在此处找到有关 RRDtool 的更多信息:http://oss.oetiker.ch/rrdtool/index.en.html

希望对您有所帮助!