我有兴趣知道rrdtool是否有替代方法来记录时间序列数据。我正在寻找可以扩展以监控大量设备的东西。
从我读到的关于这个主题的内容来看,当你用大量数据点击它时,rrdtool就会受到I / O限制。由于我设想这可以扩展到大量要监控的设备,我很好奇是否有任何不会阻塞I / O的替代方案。优先使用SQL,但不一定。
由于
答案 0 :(得分:5)
有些时间序列数据库具有高可用性和/或可扩展性作为目标。
也许看看
答案 1 :(得分:4)
如果I / O性能是主要的担心,那么你想要查看RRDTools当前版本(1.4)中可用的rrdcached之类的内容。
在每个数据源的每个值8个字节之后,I / O开销不是正在写入的数据的函数。 I / O带宽来自于在写出之前需要读入整个扇区(通常为4k)的事实。突然写入8个字节,你已经读/写了8k字节。
rrdcached将所有这些写入合并在一起,因此当更新RRD时,有用数据(实际DS值)与浪费数据(扇区中的备用字节)的比率会降低。
当所有RRDTools检测到它运行时(通过环境变量),它将自动与rrdcached一起使用。这允许他们在需要时触发刷新,例如从数据生成图表时。
虽然切换到基于SQL的解决方案可能有助于考虑支持SQL所需的额外I / O.考虑到你不倾向于在那种随机访问模式中使用RRD数据,数据库对于这个问题来说是一个大锤。虽然坚持使用RRDTool可以访问所有理解并可以处理文件的生态系统工具,这在您已经熟悉的情况下非常有用。
答案 2 :(得分:2)
我的一位朋友不久前在SQL后端做了一些工作来存储循环数据:http://rrs.decibel.org
但是,我怀疑,既然您在询问“要监控的设备”,那么您可能正在寻找更完整的解决方案。
答案 3 :(得分:1)
如果每秒I / O操作是您的主要瓶颈并且您正在使用Linux,那么只需要花费大量内存就可以轻松入侵。使用tmpfs mount来暂存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-writing应用程序之前,不要忘记将已保存的RRD文件复制到挂载点中!您可能需要编辑该服务的init脚本,以确保文件在启动之前就在那里。如果它在没有文件的情况下启动,则会创建新的裸文件,一旦读取目录被空RRD覆盖,您将会非常困惑。
如果在某些时候你需要调整tmpfs mount的大小,你可以动态地执行此操作:
bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes