rrdtoolインストール
   by K.I
   2005/03/21
 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の広告がうるさすぎるので基本は非表示にしました