2009-03-03 14 views
7

時系列データを記録するためのrrdtoolの代替方法があるかどうかを知りたいと思っています。私は、多数のデバイスを監視するために拡張できるものを探しています。大容量のrrdツールの代替方法

rrdtoolは大量のデータでヒットするとI/Oバインドされます。私は監視するデバイス数が非常に多いため、これを想定しているので、I/Oを犠牲にしない代替方法があれば興味があります。望ましいSQLベースですが、必ずしもそうではありません。

おかげ

+0

、それは良いのではないでしょうか?これは、RAID、ソリッドステートディスク、複数のマシンなどのハードウェアソリューションを使用して無関係のデータを追跡できることを意味します。 – JasonSmith

+0

私のポイントだけでなく...質問は、HWがどれくらいうまく使用されているかです... rrdcachedの使用はかなり最適です...データベースは(一日の終わりに)ディスクに書き込む必要もあります。しかし、それははるかに一般的な目的以来、私はそれがrrdtoolと同じくらい効率的にできるようになるとは思っていません... –

答えて

4

I/Oパフォーマンスが心配な場合は、rrdcachedのようなものを調べる必要があります。これは現在のバージョン(1.4)のRRDToolsで利用できます。

I/Oオーバーヘッドは、データソースごとに各値が8バイトごとに書き込まれるデータの関数ではありません。 I/O帯域幅は、セクタ全体(通常は4k)を書き込む前に読み込む必要があるという事実から来ています。あなたは8kバイトを読み書きした8バイトを突然書き込む。

rrdcachedはこれらのすべての書き込みを結合します。したがって、RRDが更新されると、有益なデータ(実際のDS値)と無駄なデータ(セクタ内のスペアバイト)の比率が低下します。

すべてのRRDToolsは、実行中(環境変数を介して)を検出すると自動的にrrdcachedと連動します。これにより、必要に応じて、たとえばデータからグラフを生成するときにフラッシュをトリガすることができます。

SQLベースのソリューションに切り替えると、SQLをサポートするために必要な追加のI/Oが考慮される可能性があります。この種のランダムアクセスパターンでRRDデータを使用する傾向がないことを考慮すると、データベースは問題の惨事です。 RRDToolを使用すると、ファイルを理解して作業することができるすべての環境システムにアクセスできます。これは、特に使い慣れている場合に便利です。

2

私の友人は、ラウンドロビンデータを格納するSQLバックエンドにしばらく前にいくつかの作業をした:あなたは、「監視するデバイス」について尋ねているので、http://rrs.decibel.org

はしかし、私はそれを疑いますより完全なソリューションを探しているかもしれません。

+0

私は私の研究でそれを発見しました。私は維持される見ていないので、私はそれを検討するには少し消極的だった。 – SorinV

+0

私はちょうどそれが最後の更新が2005年であったように思えました。今は動作しないとは限りません。私はタールボールを抽出する時間をとっていませんでした。 : - / –

5

ゴールとして高可用性および/またはスケーラビリティを持つ時系列データベースがあります。

、RRD

  • whisperの上にキャッシュ層を

    • rrdcachedを見ているかもしれない、graphite
    • opentsdbの背後にあるデータベースエンジンが書かれた分散、スケーラブルな時系列データベース(TSDB)でありますHBaseの上にある
    • reconnoiterが、モニタリングに重点を置いているが、
  • 1

    1秒あたりのI/O操作が主要なボトルネックであり、Linuxを使用している場合は、メモリを消費するだけの簡単なハックがあります。 tmpfsマウントを使用して、RRD書き込みをステージングします。

    すべてのI/O操作はメモリ内で行われ、ディスクI/Oを実行する際に検出されるボトルネックは発生しません(ソリッドステートディスクを使用するよりも高速です)。その後、cronジョブとrsyncを使用して、変更されたRRDだけを数分に1回ディスクにコピーできます。


    新しいマウントポイントにディレクトリ

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

    適切なオプションで500メガバイト、最大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 
    

    新しいマウントポイントごとに2分

    ディスクにのみ変更のラウンドロビンデータベースを同期するためにcronジョブを設定し

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

    に書き込むために、あなたのRRD-書き込みアプリケーションを設定

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

    保存したRRDファイルを忘れずにコピーしてくださいあなたのrrd書込みアプリケーションを起動する前に、のマウントポイントにのesをインストールしてください!そのサービスが起動する前にファイルが存在することを確認するために、そのサービスのinitスクリプトを編集する必要があります。ファイルがなくても起動すると、新しいものが作成され、空のRRDで読み込みディレクトリが上書きされると非常に混乱します。

    あなたはtmpfsのマウントサイズを変更する必要がある時点で、あなたはその場でそれを行うことができた場合:それはI/Oバウンドなら

    bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes 
    
    関連する問題