2009-03-03 76 views
7

我有興趣知道是否有任何替代rrdtool記錄時間序列數據。我正在研究一些可以擴展大量設備的功能。rrd工具替代高容量

從我對這個問題看,rrdtool的是I/O綁定當你用大量數據的擊打。由於我設想這可以擴展到大量的設備進行監控,我很好奇,如果有任何替代方案不會窒息I/O。基於SQL的優選,但不一定。

感謝

+0

如果它的I/O瓶頸,那不是很好?這意味着你可以採用硬件解決方案,比如RAID,固態硬盤和多臺機器來跟蹤不相關的數據? – JasonSmith 2009-12-12 13:43:11

+0

我的觀點是......問題在於HW的使用情況如何...... rrdcached的使用是非常優化的...數據庫(在一天結束時)也必須將東西寫入磁盤,但由於它是更通用的目的,我懷疑它可以像rrdtool一樣高效地處理它... – 2010-11-29 07:21:55

回答

4

如果I/O性能是主要擔心的話,那麼您想研究一下類似於當前版本(1.4)RRDTools中可用的rrdcached

的I/O開銷不在數據的功能被寫入,每個數據源中的所有各值8個字節之後。 I/O帶寬來自整個扇區(通常爲4k)在寫出之前需要讀入的事實。突然寫8個字節,你已經讀/寫了8K字節。

的rrdcached聚結所有這些寫在一起,以便當一個RRD被更新的有用數據(實際DS值)浪費數據(在該扇區中備用字節)的比率降低。當他們檢測到它運行(通過環境變量)

所有RRDTools將自動rrdcached工作。這可以讓他們在需要時觸發刷新,例如從數據生成圖表時。

當切換到基於SQL的解決方案可以幫助考慮將需要支持SQL額外的I/O。考慮到你不傾向於按照那種隨機訪問模式使用RRD數據,數據庫對於這個問題來說是一個大錘。儘管堅持使用RRDTool可以訪問所有理解和可以處理文件的工具的生態系統,如果您已經熟悉這些文件,這尤其有用。

2

我的一個朋友做了一些工作,前一段時間在SQL後端存儲循環賽數據:http://rrs.decibel.org

不過,我懷疑,既然你問「設備監控」 ,您可能正在尋找更完整的解決方案。

5

有一些時間序列數據庫具有高可用性和/或可擴展性爲目標。

也許看看

  • rrdcached,在RRD
  • whisper頂部的緩存層,後面graphite
  • opentsdb數據庫引擎是一個分佈式的,可擴展的時間序列數據庫(TSDB)寫在HBase上面
  • reconnoiter雖然它的重點更多是監視
1

如果每秒的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 

創建具有適當的選項

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文件500MB,最大內存文件系統到新的掛載點

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作業同步僅將更改的RRD磁盤每2分鐘

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

不要忘記複製您保存的RRD文件es進入掛載點之前你開始你的rrd-writing應用程序!您可能需要編輯該服務的初始化腳本以確保文件在啓動之前存在。如果在沒有文件的情況下啓動,則會創建新的裸機,並且一旦讀取的目錄被空的RRD覆蓋,您將非常困惑。

如果在某些時候,你需要調整掛載tmpfs的,你可以這樣做對飛:

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