7

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

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

谢谢

4

4 回答 4

5

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

也许看看

于 2011-08-25T13:39:50.890 回答
4

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

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

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

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

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

于 2010-02-04T11:34:12.137 回答
2

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

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

于 2009-03-03T06:02:39.767 回答
1

如果每秒 I/O 操作是您的主要瓶颈并且您使用的是 Linux,那么有一个简单的 hack 方法,它只会消耗您的内存。使用 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-writing 应用程序以写入新的挂载点

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
于 2013-07-12T18:36:18.417 回答