今更だけど、RRDtool触ってみた～データベース作成編(rrdtool create)～

### 今あるサーバ環境を変えずにとある装置のとある数値を取得し保存しておきたい

### RRDtool とは？
「RRDtool」は「Round Robin Database tool」の略です。
とある装置に対して、「ネットワーク帯域幅」「温度」「CPU負荷」等のあらゆる種類のデータソースから収集した時系列データを処理することを目的としています。
「RRD(Round Robin Database)」と呼ばれるデータベースにデータを格納し、それをグラフ化する機能を提供しています。

　探し方が悪いのか、中々RRDtoolの細かい部分の解説だったり例題だったりがほとんど出てこないので、自分なりにまとめてみた。
　今回の内容は、**『ある装置からデータを取得して<font color="Red">保存するためのデータベース作成</font>』** まで。
　どう取得する、取得した数値に対してどうこうする、
　例えば数値から閾値以上ならメール通知するとか、
　グラフ化はする等についてはまた別途(こちらも詳細例が中々ない…)。





<font color="Red">
１　まずはデータを格納するために、データベースを作成する (今回はここ★)</font>

２　作成したデータベースへ、値を格納するためのプログラムを作成する (次回)
３　プログラムを動かして、ちゃんと格納できているか確認する (次回)
***

### １ まずはデータを格納するために、データベースを作成する
　データを格納するためのデータベース(RRD/ラウンドロビンデータベース)を作成します。
　気を付けないといけないのが、**<font color="Red">この時点で格納するデータ数が決まってしまう**</font>ということ。

　コマンドは
```
 rrdtool create ファイル名 オプション(色々決める)
```
 **ファイル名**はつまりデータベース名。
 何のデータを格納するか分かるような名前にすればOK。
 通常ファイルの拡張子は.rrdですが、どんなファイル名でも受け付けるらしい・・・(本当？)。

次のオプションが厄介です。





**まずは、今回作成した条件
・データベース名は <font color="Red">cpu.rrd</font>
・とある<font color="Red">装置1台に対して、現在のCPU使用率を取得</font>する
・取得は<font color="Red">1回/分</font>
・取得したデータは<font color="Red">1年間</font>保存する**
上記を踏まえてのデータベース作成コマンド
```
　rrdtool create cpu.rrd --step 60 DS:cpu:GAUGE:120:0:100 RRA:AVERAGE:0:1:525600
```

・・・はい。
***


#### <font color="Blue"> という訳で、解 説</font>
上記のコマンドオプションを分解して以下に解説。

1. **cpu.rrd**
　作成するファイル名(データベース名)




2. **--start 開始時刻** (又は **-b 開始時刻**)※今回はデフォルトのため省略
　最初の値がRRDに追加される時刻を**1970-01-01 UTCからの経過秒数で指定**する。
　rrdtoolはこの**指定した時刻より前のデータを受け付けない(保存しない)**。
　デフォルトは**現在時刻から10秒前。**




3. **--step  60** (又は **-s 60** )
　取得したデータを**RRDへ追加する基本間隔(秒)の指定**。デフォルトは**300秒**。
　今回の場合、**1分毎に取得してほしいので60(秒)** とする。これを**基準データ**というらしい。



4. **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となる。







5. **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ファイル)を
　　　作成することになるので…。
***

### ２　作成したデータベースへ、値を格納するためのプログラムを作成する
　次の記事にて作成。
### ３　プログラムを動かして、ちゃんと格納できているか確認する
　次の記事にて作成。



### 終わりに
　RRDtoolは中々取っつきにくい(個人の感想)ので、自分の備忘録のためにもまとめようと思いました。
　ただ、記事が長くなりそうなので一旦区切りとします。
　次の記事では作ったデータベースへデータを格納するためのプログラム解説をします。

***
参考サイト
・rrdtoolマニュアルを日本語訳してくれています。
　http://agj.at/~fors/sysworks/data/rrdtool/