用于大容量的 rrd 工具替代品

Posted

技术标签:

【中文标题】用于大容量的 rrd 工具替代品【英文标题】:rrd tool alternative for high volume 【发布时间】:2010-10-10 22:53:08 【问题描述】:

我很想知道是否有任何替代 rrdtool 来记录时间序列数据。我正在寻找可以扩展以用于监控大量设备的东西。

从我读到的关于这个主题的内容来看,当您使用大量数据访问 rrdtool 时,它会受到 I/O 限制。由于我设想这可以扩展到要监视的大量设备,因此我很好奇是否有任何替代方案不会阻塞 I/O。首选基于 SQL,但不一定。

谢谢

【问题讨论】:

如果它是 I/O 绑定的,那不是很好吗?意思是你可以采取硬件解决方案,比如RAID、固态硬盘、多台机器来跟踪不相关的数据? 我的观点也是......问题是硬件的使用情况如何...... rrdcached 的使用非常理想......数据库(在一天结束时)也是必须将内容写入磁盘,但由于它更通用,我怀疑它是否能够像 rrdtool 一样高效...... 【参考方案1】:

有些时间序列数据库以高可用性和/或可扩展性为目标。

可以看看

rrdcached,rrd之上的缓存层 whisper,graphite背后的数据库引擎 opentsdb 是一个分布式、可扩展的时序数据库 (TSDB),编写在 HBase 之上 reconnoiter 虽然它的重点更多的是监控

【讨论】:

【参考方案2】:

如果 I/O 性能是主要问题,那么您需要研究类似 rrdcached 的东西,它在 RRDTools 的当前版本 (1.4) 中可用。

I/O 开销不是正在写入的数据的函数,毕竟每个值是每个数据源 8 个字节。 I/O 带宽来自于在写出之前需要读入整个扇区(通常为 4k)的事实。突然要写 8 个字节,你已经读/写了 8k 个字节。

rrdcached 将所有这些写入合并在一起,因此当更新 RRD 时,有用数据(实际 DS 值)与浪费数据(扇区中的备用字节)的比率会降低。

所有 RRDTools 在检测到 rrdcached 运行时(通过环境变量)都会自动使用它。这允许它们在需要时触发刷新,例如在从数据生成图表时。

虽然切换到基于 SQL 的解决方案可能有助于考虑支持 SQL 所需的额外 I/O。考虑到您不倾向于在那种随机访问模式中使用 RRD 数据,数据库对于这个问题来说有点像大锤。坚持使用 RRDTool 将继续访问所有理解并可以使用文件的工具生态系统,这非常有用,尤其是在您已经熟悉它的情况下。

【讨论】:

【参考方案3】:

我的一个朋友不久前在 SQL 后端做了一些工作来存储循环数据:http://rrs.decibel.org

但是,我怀疑既然您询问的是“要监控的设备”,您可能正在寻找更完整的解决方案。

【讨论】:

我在研究中发现了这一点。看不出来保养,所以有点勉强考虑。 我也发现了,好像上次更新是 2005 年。并不意味着它现在不起作用,我只是没有花时间提取 tarball。 :-/【参考方案4】:

如果每秒 I/O 操作是您的主要瓶颈,并且您使用的是 Linux,那么有一个简单的技巧,它只会消耗您的内存。使用 tmpfs 挂载来暂存您的 RRD 写入。

所有的 i/o 操作都将在内存中完成,并且不会出现在执行磁盘 i/o 时发现的任何瓶颈(这甚至比使用固态磁盘更快)。然后,您可以使用 cron 作业和 rsync 每隔几分钟将更改的 RRD 复制到磁盘一次。


创建目录

bash-4.2# mkdir /mnt/rrd-reads
bash-4.2# mkdir /mnt/rrd-writes

使用适当的选项创建最大 500MB 的 RAM 文件系统

bash-4.2# mount -t tmpfs -o size=500m,mode=0750,uid=collectd,gid=collectd none /mnt/rrd-writes
bash-4.2# echo "none /mnt/rrd-writes tmpfs size=500m,mode=0750,uid=collectd,gid=collectd 1 2" >> /etc/fstab

将旧的 RRD 文件复制到新的挂载点

bash-4.2# cp -a /var/lib/collectd/rrd/* /mnt/rrd-writes

配置您的 rrd 写入应用程序以写入新的挂载点

bash-4.2# sed -i -e 's/DataDir "\/var\/lib\/collectd\/rrd"/DataDir "\/mnt\/rrd-writes"/' /etc/collectd/collectd.conf

设置 cron 作业以每 2 分钟仅将更改的 RRD 同步到磁盘一次

bash-4.2# echo "*/2 * * * * collectd rsync -a /mnt/rrd-writes/* /mnt/rrd-reads/ ; sync" > /etc/cron.d/rrd-sync

不要忘记将您保存的 RRD 文件复制到安装点开始您的 rrd 编写应用程序之前!您可能需要编辑该服务的初始化脚本,以确保文件在它启动之前就在那里。如果它在没有文件的情况下启动,则会创建新的裸文件,并且一旦读取的目录被空 RRD 覆盖,您会感到非常困惑。

如果在某些时候您需要调整 tmpfs 挂载的大小,您可以随时进行:

bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes

【讨论】:

以上是关于用于大容量的 rrd 工具替代品的主要内容,如果未能解决你的问题,请参考以下文章

5个Linux命令行工具的替代品!(赶紧收藏)

5个Linux命令行工具的替代品!(赶紧收藏)

大容量核心数据搜索或其他替代方案?

Perl:模板工具包的替代品

用于 Oracle 查询开发的 SQL 工具和 Toad IDE 的替代方案

用于 64 位应用程序的 Stingray Objective Toolkit C++ 的替代品?