rrdtoolインストール
by K.I
2005/03/21
Index
サーバの状態を表示するために、データをデータベースに蓄積してグラフ化する汎用ツールであるrrdtoolを設定する。
- MRTGを汎用的なデータベース、グラフ化ツールとして独立させたもの。
- rrdtoolは、ラウンドロビンデータベースであり、リングバッファのように最初に決めたデータ格納場所を順に使用し、古いデータ領域から消して行くので基本的にデータベースのメンテナンスは不要になる。
- 任意の指定した期間のデータを、グラフ化することが出来るので、定常的に記録したデータについて1週間、1ヶ月、1年間の変化を示すような用途で汎用的に利用できる。
[top]
(以下からrrdtoolとパッチを入手してインストール)
# cd /usr/local/src
# wget ftp://ftp.ayamura.org/pub/rrdtool/rrdtool-1.0.48.tar.gz
# wget http://www.bigfield.com/~hiroshi/software/rrdtool-1.0.33-kanji.patch.gz
# gunzip rrdtool-1.0.33-kanji.patch.gz
# tar zxvf rrdtool-1.0.48.tar.gz
# cd rrdtool-1.0.48
# patch -p0 < ../rrdtool-1.0.33-kanji.patch
# ./configure
# make
# make install
# make site-perl-install
[top]
RRDに登録するデータは、室温や電圧等の絶対値を持つデータや、カウンタのような累積データでも良い。定期的に測定、記録されるデータは、ほとんどRRDに適合するだろう。
- まず create で、RRDを新規作成する。これは最初に1回だけ行えば良い。
- 再度、createするとデータベースが初期化されます。
rrdtool create データベースファイル名 DS:データソース指定 RRA:ラウンドロビアーカイブ指定
例えば、1日、1週間、1ヶ月、1年での表示が可能なようにデータを持つようにすると良い。
- ちなみにMRTGでは、以下のようなデータを持っている。
- 5分毎サンプル×600 →2日と2時間分
- 30分毎サンプル×600 →12日と半日分
- 2時間毎サンプル×600 →50日分
- 1日毎サンプル×732 →2年分
- 正確には上記の範囲を含んで、それぞれデータ総量が797日分になるようになっている。(例えば以下のように)
RRA:AVERAGE:0.5:1:600
RRA:AVERAGE:0.5:6:700
RRA:AVERAGE:0.5:24:775
RRA:AVERAGE:0.5:288:797
rrdtool create test.rrd -s 300 →test.rrdという名前でRRD作成(30秒間隔)
--start 1111371985
DS:record_count:COUNTER:600:U:U →600秒以上はUNKNOWNとする
RRA:AVERAGE:0.5:1,24 →5分×1の平均(つまりそのまま)×24で2時間分
RRA:AVERAGE:0.5:6:10 →5分×6で30分毎の平均を10個で5時間分
-s 秒数 →データ間隔(秒)、デフォルトは300秒
rrdtoolの時間指定は、Unixで一般的な1970年1月1日からの経過秒数です。
- 例えば、Unixのコマンドラインなら、現在の時間は、
date +%s
- ちなみにperl,ruby,PHPでの求め方は、それぞれ以下のようになります。
print time();
print Time.now.to_i
print time();
RRDに格納するデータの指定。
DS:データ名:データ種別:データ取得間隔(秒):最小:最大
- データ名
- データ種別
- GAUGE :温度等の絶対値を持つもの →そのまま記録する
- COUNT :減少することが無い積算値 →秒毎の差分を求めRRA指定の処理をしてから記録する1
- DERIVE :COUNTと同様、差分を求めるが減少することもあるデータを扱う
- ABSOLUTE :COUNTと同様積算値を扱うが、データ取得時に自動的にリセットされるような場合に使う
- データ取得間隔 :この間隔以上のデータはUNKNOWNとする
- 最小値、最大値 :この範囲外のデータはエラーとして記録しない。特に必要が無い場合は、U(unknown)を指定する。
RRDに登録するデータの処理方法や保管される数等を指定する
。
RRA:結合関数:無効許容率:データ母数:保管データ数
- 結合関数
- AVERAGE →平均値
- MIN →最小値
- MAX →最大値
- LAST →最終値
- 無効許容率 →データ更新に失敗した場合はUNKNOWNとなるが、無効データの割合が許容値より小さければデータを補完する
- データ母数 →ここで指定した数のデータを母数として、結合関数で示される値を求める
- 求めたデータを何個分保持するかの指定
1オーバーフローチェックも行う。
[top]
日常的には、データの登録を自動的に行うだけである。
- updateでRRDへの登録、fetchで読み出しを行う。
- 例えば、データ登録をスクリプト化して、cron等で定期的に行えば良い。
rrdtool update RRDファイル名 時間指定 データ1 データ2 ...
rrdtool fetch RRDファイル名 --start 開始時間指定 --end 修了時間指定
[top]
- RRDに登録されたデータを、以下のようにグラフ化する。
rrdtool graph 画像ファイル名 --start 開始時間 -- end 修了時間
DEF:データソース名定義
CDEF:データソース名定義
グラフ種別:グラフ表示指定
表示するデータソースの指定
DEF:変数名=RRDファイル名:データ名:結合関数
- 変数名 :読み出したデータを入れる変数名
- データ名 :RRDのデータ名
- 結合関数 :AVERAGE,MAX,MIN,LASTのいずれか
新規変数の定義
CDEF:変数名=逆ポーランド記法で式を記述(,区切り)
グラフの表示方法の指定
グラフ種別:変数名#色指定[:凡例名]
- グラフ種別 :AREA(塗りつぶし)、LINE1(細)〜LINE3(太)の3種、それとSTACKで既存のグラフに追記する
- 変数名#色指定 :変数名と色指定をRGBの16進値で指定
- 凡例での名称指定(省略可)
文字表示(指定が多いので省略)
GPRINT:変数名:結合関数:"フォーマット文字列"
[top]
室温を記録してグラフに表示するのに、JpGraphを使っていたが、描画が遅いのと、表示範囲を変更したりするのが大変なので、rrdtoolを使って気温を記録することを考えた。
- 気温の記録用のプログラム tempをrrdtoolを使えるように大幅に改定した。
- まず、データベースに記録する情報を決めて、データベースを作成する。
- MRTGと互換のデータベース形式とする。
rrd_file = "/home/www/log/temp.rrd"
rrdtool create temp.rrd
DS:t1:GAUGE:1200:U:U DS:t2:GAUGE:1200:U:U DS:t3:GAUGE:1200:U:U
RRA:AVERAGE:0.5:1:600 RRA:AVERAGE:0.5:6:700
RRA:AVERAGE:0.5:24:775 RRA:AVERAGE:0.5:288:797
--start 1078000000`
- 気温の登録は、日付とデータベース生成で定義した3つのデータセット値を指定する。
rrdtool update temp.rrd 1111481346:100:20:30
- RRDに記録されたデータは、任意の範囲でグラフ化することが出来ます。
- 約2ヶ月分のデータをグラフ化した例を以下に示します。
rrdtool graph temp.rrd -s -64day -w 640 -h 120
-x DAY:1:WEEK:1:WEEK:1:0:%m/%d
DEF:t1=temp.rrd:t1:AVERAGE
DEF:t3=temp.rrd:t3:AVERAGE
CDEF:t1x=-0.0055,t1,*,t1,*,1.9235,t1,*,+,138.25,-
CDEF:z=t1,0,*
LINE2:z#000000"
LINE2:t1x#ff0000:'外気温'
LINE2:t3#0000ff:'室温'"
- 上記の指定で、以下のような画像ファイルを生成します。
- graphは、デフォルトでもある程度は表示出来るが、 詳細設定も可能。
- この例では、x軸の目盛を週単位にして、日付を表示するように指定してあります。
[top]
- rrdtoolでは、データ登録は時間軸で順番に登録しなければならない。
- 最後に登録したデータよりも、古いデータを登録することは出来ない。→結構、重要制限
- rrdtoolは、定期的に記録されない場合でもある程度補間してくれる。
- でも、10分間隔のデータを5分間隔で設定したRRDに登録しても補間されなかった。
- 補間の係数が0.5なら出来そうなんだけど。。。
- データの削除方法について、以下は過去に自分自身が書いた更新記録からの抜粋。(100529追記)
- 最近、-3000℃が記録されたので検索していたら、自分自身の情報を見つけたので忘れないように追記しておく。
- 温度表示のグラフがおかしくなった。7/30ぐらいに-650℃を記録してしまった。。
- rrdtoolのデータベースに、異常値が記録されてしまったらしい。
> rrdtool dump temp.rrd > 070808.xml
- 7/29 14:0007/30 2:00ぐらいのデータが異常になっている。
- でも、グラフを作り直しても直らない。再度dumpすると、ちゃんと直ってるのに。。
- よく考えたら、データベースを時間区切りを変えて3通り作っていることに気がついた。
- で、3通りのデータを直したらOKだった。
[top]
[Homeに戻る]
⇒ Disqusの広告がうるさすぎるので基本は非表示にしました