時系列データをログに記録するための rrdtool に代わるものがあるかどうか知りたいです。多数のデバイスを監視するために拡張できるものを探しています。
この件について私が読んだことによると、rrdtool は、大量のデータでヒットすると I/O バウンドになります。私はこれを非常に多くのデバイスを監視するように拡張することを想定しているので、I/O を詰まらせない代替手段があるかどうか知りたいです。SQL ベースが望ましいですが、必ずしもそうとは限りません。
ありがとう
時系列データをログに記録するための rrdtool に代わるものがあるかどうか知りたいです。多数のデバイスを監視するために拡張できるものを探しています。
この件について私が読んだことによると、rrdtool は、大量のデータでヒットすると I/O バウンドになります。私はこれを非常に多くのデバイスを監視するように拡張することを想定しているので、I/O を詰まらせない代替手段があるかどうか知りたいです。SQL ベースが望ましいですが、必ずしもそうとは限りません。
ありがとう
I/O パフォーマンスが主な懸念事項である場合は、RRDToolsの現在のバージョン (1.4) で利用可能なrrdcachedなどを調べる必要があります。
I/O オーバーヘッドは、書き込まれるデータの関数ではありません。データ ソースごとにそれぞれの値が 8 バイトであるためです。I/O 帯域幅は、書き出す前にセクター全体 (通常は 4k) を読み込む必要があるという事実に由来します。突然 8 バイトを書き込むために、8k バイトを読み書きしました。
rrdcached はこれらすべての書き込みを結合するため、RRD が更新されると、無駄なデータ (セクター内のスペア バイト) に対する有用なデータ (実際の DS 値) の比率が減少します。
すべての RRDTools は、(環境変数を介して) 実行中を検出すると、rrdcached で自動的に動作します。これにより、データからグラフを生成する場合など、必要に応じてフラッシュをトリガーできます。
SQL ベースのソリューションに切り替えると、SQL をサポートするために必要な余分な I/O を考慮するのに役立つ場合があります。そのようなランダムアクセスパターンでRRDデータを使用する傾向がないことを考えると、データベースは問題の大きなハンマーです。RRDTool を使い続けることで、ファイルを理解して操作できるツールのすべてのエコシステムに引き続きアクセスできます。これは、特に既に使い慣れている場合に役立ちます。
私の友人は、ラウンド ロビン データを格納するために SQL バックエンドで少し前に作業を行いました: http://rrs.decibel.org
ただし、「監視するデバイス」について尋ねているので、より完全なソリューションを探しているのではないかと思います。
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
適切なオプションを使用して、最大 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
変更された RRD のみを 2 分ごとにディスクに同期するように cron ジョブを設定します。
bash-4.2# echo "*/2 * * * * collectd rsync -a /mnt/rrd-writes/* /mnt/rrd-reads/ ; sync" > /etc/cron.d/rrd-sync
RRD書き込みアプリケーションを開始する前に、保存した RRD ファイルをマウント ポイントにコピーすることを忘れないでください。そのサービスの init スクリプトを編集して、開始前にファイルが存在することを確認する必要がある場合があります。ファイルが配置されていない状態で開始すると、新しい裸のファイルが作成され、読み取りディレクトリが空の RRD で上書きされると、非常に混乱します。
ある時点で tmpfs マウントのサイズを変更する必要がある場合は、その場で行うことができます:
bash-4.2# mount -t tmpfs -o remount,size=850m /mnt/rrd-writes