今あるサーバ環境を変えずにとある装置のとある数値を取得し保存しておきたい
RRDtool とは?
「RRDtool」は「Round Robin Database tool」の略です。
とある装置に対して、「ネットワーク帯域幅」「温度」「CPU負荷」等のあらゆる種類のデータソースから収集した時系列データを処理することを目的としています。
「RRD(Round Robin Database)」と呼ばれるデータベースにデータを格納し、それをグラフ化する機能を提供しています。
探し方が悪いのか、中々RRDtoolの細かい部分の解説だったり例題だったりがほとんど出てこないので、自分なりにまとめてみた。
今回の内容は、『ある装置からデータを取得して保存するためのデータベース作成』 まで。
どう取得する、取得した数値に対してどうこうする、
例えば数値から閾値以上ならメール通知するとか、
グラフ化はする等についてはまた別途(こちらも詳細例が中々ない…)。
2 作成したデータベースへ、値を格納するためのプログラムを作成する (次回)
3 プログラムを動かして、ちゃんと格納できているか確認する (次回)
1 まずはデータを格納するために、データベースを作成する
データを格納するためのデータベース(RRD/ラウンドロビンデータベース)を作成します。
気を付けないといけないのが、この時点で格納するデータ数が決まってしまうということ。
コマンドは
rrdtool create ファイル名 オプション(色々決める)
ファイル名はつまりデータベース名。
何のデータを格納するか分かるような名前にすればOK。
通常ファイルの拡張子は.rrdですが、どんなファイル名でも受け付けるらしい・・・(本当?)。
次のオプションが厄介です。
まずは、今回作成した条件
・データベース名は cpu.rrd
・とある装置1台に対して、現在のCPU使用率を取得する
・取得は1回/分
・取得したデータは1年間保存する
上記を踏まえてのデータベース作成コマンド
rrdtool create cpu.rrd --step 60 DS:cpu:GAUGE:120:0:100 RRA:AVERAGE:0:1:525600
・・・はい。
という訳で、解 説
上記のコマンドオプションを分解して以下に解説。
-
cpu.rrd
作成するファイル名(データベース名) -
--start 開始時刻 (又は -b 開始時刻)※今回はデフォルトのため省略
最初の値がRRDに追加される時刻を1970-01-01 UTCからの経過秒数で指定する。
rrdtoolはこの指定した時刻より前のデータを受け付けない(保存しない)。
デフォルトは現在時刻から10秒前。 -
--step 60 (又は -s 60 )
取得したデータをRRDへ追加する基本間隔(秒)の指定。デフォルトは300秒。
今回の場合、1分毎に取得してほしいので60(秒) とする。これを基準データというらしい。 -
DS:cpu:GAUGE:120:0:100
⇒DS:データソース名:データソースタイプ:最大許容間隔:最小値:最大値
取得するデータ(データソース/DS)の基本属性を決めるオプション。
今回だとCPU使用率をデータソースとして保存したいので、その基本属性を決める。
・データソース名:1~19文字の[a-zA-Z0-9_]で任意の名前を決定する。
今回だと「cpu」というDS名。
※これは後でRRDからデータを参照する際に使われます(次回の記事範囲)。
・データソースタイプ:取得したいデータの形態を指定する。
GAUGE、COUNTER、DERIVE、ABSOLUTE から指定する。
GAUGE:温度やCPU使用率等、時間とのかかわりが直接なく、取得時のタイミング時だけ時間が関係する。
そのようなデータの場合はGAUGEを指定する。※今回だとこれ。
COUNTER、DERIVE、ABSOLUTE は省略…。
・最大許容間隔:
ある時刻でのデータ取得とその次のデータ取得(今回だと60秒後)にデータが格納されるはずですが、
なんらか遅れる場合があります。
データが格納されないとその時刻でのデータがUNKNOWN値と格納されます。
いつまでUNKNOWN値と判定せず待つかの期限を設定する項目。
一般的にstepで指定した秒数の2倍を登録するみたい。
今回だと120秒(60秒×2倍)。
・最小値:最大値 取得するデータソースの最小値、最大値が分かれば指定する。
指定がある場合、範囲外の値が取得された場合はUNKNOWN値として格納する。
今回であれば、使用率0(%)~100(%)なので、0:100となる。 -
RRA:AVERAGE:0:1:525600
⇒RPA:統合関数:未定義値許容率:ステップ:データ数
上で決めたデータをラウンドロビンアーカイブ(RSA)に格納するオプション。
・統合関数:AVERAGE、MIN、MAX、LASTから指定する。
取得したデータをそのまま格納したり平均・最大値・最小値を記録するか指定する。
今回はAVERAGEを選択。本来そのまま格納したい時はLASTだけど。
後述のステップの関係でAVERAGEでもできちゃうのでこっちで。
・未定義値許容率:
統合値に含まれるUNKNOWN値の割合がどれだけ以下なら統合値を非未定義値とみなすかを定義します。
…まぁ多分、平均なら元にする参考データ数の中にUNKNOWN値がどれだけ含まれてたら計算不能とする?
みたいな感じだと思われます。
一個でも含まれてたらってことで0にしておきます。
・ステップ:
格納する際、いくつの基準データで統合関数(今回だと平均値)の結果を出す?ということで、
今回は1つのデータで。これで実質そのままの値で格納。
・データ数:いくつのデータ値を保存するか。ここで、データの保存期間が決まる。
今回は毎分/回取得するデータを1年間保存してほしいので、
60(m)*24(h)*365(d)=525,600(データ)※1年間分
これで、データベース(ファイル名)の大きさが決定(1年間分)するので注意が必要。
⇒一度作成してみて、ファイルがどれほどの容量になるか確認しておくと安心かな。
今回は1台ですが、複数台取得する場合は台数分のデータベース(RRDファイル)を
作成することになるので…。
2 作成したデータベースへ、値を格納するためのプログラムを作成する
次の記事にて作成。
3 プログラムを動かして、ちゃんと格納できているか確認する
次の記事にて作成。
終わりに
RRDtoolは中々取っつきにくい(個人の感想)ので、自分の備忘録のためにもまとめようと思いました。
ただ、記事が長くなりそうなので一旦区切りとします。
次の記事では作ったデータベースへデータを格納するためのプログラム解説をします。
参考サイト
・rrdtoolマニュアルを日本語訳してくれています。
http://agj.at/~fors/sysworks/data/rrdtool/