質問

時系列データを記録するためのrrdtoolに代わるものがあるかどうかを知りたいです。監視する多数のデバイスに合わせて拡張できるものを探しています。

このテーマについて読んだことから、rrdtoolは大量のデータでヒットした場合にI / Oバウンドです。私はこれを監視する非常に多くのデバイスに拡張することを想定しているため、I / Oを停止させない代替手段があるかどうか興味があります。望ましいSQLベースですが、必ずしもそうではありません。

ありがとう

役に立ちましたか?

解決

I / Oパフォーマンスが主な懸念事項である場合、 rrdcached 。RRDToolsの現在のバージョン(1.4)で利用可能です。

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top