Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rrdtool基礎から応用

13,202 views

Published on

Rrdtool基礎から応用

  1. 1. RRDTool基礎から応用 株式会社はてな システムプラットホーム部 id:shoichimasuhara
  2. 2. ■自己紹介 ● id:shoichimasuhara ● Twitter:@shoichimasuhara ● 所属:株式会社はてな システムプラットホーム部 ● 経歴 ● ● ● ● 塾講師 陸上自衛官 鯖管 (レンサバ) はてなインフラ (イマココ)
  3. 3. RRDTool基礎
  4. 4. ■RRDToolって? ● ● RRD(Round Robin Database)を操作するためのツール (そのま まですね) 今回はTobias Oetikerさんのrrdtool 1.4.7 について話します http://oss.oetiker.ch/rrdtool/ ● 大雑把に言うと、ラウンドロビンデータベースを ● 作って(rrdtool create) ● 更新して(rrdtool update) グラフを書く(rrdtool graph) ためのものです ●
  5. 5. ■RRD(Round Robin Database)って? ● データサイズの変わらないただ一つでもないデータベース ● ラウンドロビン方式でデータが格納されます ● 古いものは期限が来ると破棄されます ● rrdtoolにおけるRRDは基本的に時系列データを蓄積します
  6. 6. ■RRD(Round Robin Database)って? ● イメージするなら円形状のデータストア データを順番に 入れていく
  7. 7. ■RRD(Round Robin Database)って? ● イメージするなら円形状のデータストア 1周したら 古いデータを破棄
  8. 8. ■RRDの作成 ● rrdtool create を使います ● コマンドはこんな感じ rrdtool create ファイル名 オプション スキーマ定義 ● オプションには --start 初期時刻 --step 更新間隔 (先ほどの輪の小さい丸の間隔) などがあります
  9. 9. ■スキーマ定義 ● DS (Data Source) ● MySQLでいう所のカラム定義 DS:DS名:DSタイプ:ハートビート:最小値:最大値 で定義 ● DSタイプはGAUGE,COUNTER,DERIVE,ABSOLUTEのどれか ● ハートビートは有効更新間隔 RRA (Round Robin Archives) ● ● ● ● ● ● ● ● データサイズを決めるようなもの RRA:RRAタイプ:xff:ステップ数:行数 で定義 データ保存期間は ステップ秒数*ステップ数*行数 RRAタイプはAVERAGE,MIN,MAX,LASTのどれか 全DSで共通 複数定義できる
  10. 10. ■作成サンプル rrdtool create test.rrd --start 1385765991 --step 300 DS:value1:600:0:1000 DS:value2:600:0:1000 RRA:AVERAGE:0.5:1:864 RRA:AVERAGE:0.5:12:2016
  11. 11. ■RRDの更新 ● ● rrdtool update を使います (実は微妙に奥が深かったりしますが) ここでは単純に タイムスタンプ:値:値:値... をぶち込むだけ rrdtool update ファイル名 1385766415:10:20
  12. 12. ■グラフの描画 ● rrdtool graph を使います ● rrdtool の中で一番複雑 rrdtool graph 出力画像ファイル名 オプション グラフ定義 ● 詳しく説明すると日がくれるのでとりあえず例
  13. 13. ■グラフサンプル ● このコマンドを実行するとこんなグラフがかけます rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE DEF:value2=test.rrd:value2:AVERAGE AREA:value1#00FF00 LINE1:value2#FF0000
  14. 14. ■DEFとCDEFとVDEFについて ● DEF (data definition) データソースからデータを定義します (時系列データ) ● CDEF (data calculation) 他の時系列データから計算をして新しい時系列データを定 義します (時系列データ) ● VDEF (variable definition) 時系列データなどからひとつの値を定義します(値)
  15. 15. RRDTool応用
  16. 16. ■グラフの比較 ● 先ほどのグラフのvalue1 > value2 の領域を可視化したい ● 2行追加するとできます rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE DEF:value2=test.rrd:value2:AVERAGE CDEF:value3=value1,value2,GT,INF,* AREA:value3#FFDDDD LINE2:value1#00FF00 LINE1:value2#FF0000
  17. 17. ■グラフの比較 ● 先ほどのグラフのvalue1 > value2 の領域を可視化したい ● 2行追加するとできます rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE DEF:value2=test.rrd:value2:AVERAGE CDEF:value3=value1,value2,GT,INF,* AREA:value3#FFDDDD LINE2:value1#00FF00 LINE1:value2#FF0000
  18. 18. ■ちょっと説明 ● CDEF:value3=value1,value2,GT,INF,* ● 何やってるの? ● ● ● value1 と value2 を GT ( > ) で比較して ● INF(無限大特殊変数) を ● * (かけ) た
  19. 19. ■移動平均線を描いてみる ● TRENDを使います ● 1日移動平均線の定義だとこんな感じ CDEF:value2=value1,86400,TREND
  20. 20. ■移動平均線を描いてみる ● TRENDを使います ● 1日移動平均線の定義だとこんな感じ CDEF:value2=value1,86400,TREND 簡単便利
  21. 21. ■過去のグラフとの重ね合わせ ● SHIFTを使います ● CDEF:value2=value1 CDEFで一度違う変数に渡して ● SHIFT:value2:86400 ずらします
  22. 22. ■過去のグラフとの重ね合わせ ● SHIFTを使います ● CDEF:value2=value1 CDEFで一度違う変数に渡して ● SHIFT:value2:86400 ずらします ● 例では1日ずらしただけですが、一週間前のグラフを表示する と異常がわかりやすくて便利です
  23. 23. ■最小二乗法による線形予測 ● LSL(Least Squares Line)機能を使います ● データから y=ax+b の形を求める ● LSLSLOPE で a (傾き)を ● ● LSLINT で b (切片)を求めて CDEFで直線の時系列データを定義します
  24. 24. ■最小二乗法による線形予測 rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE VDEF:a=value1,LSLSLOPE VDEF:b=value1,LSLINT CDEF:value2=value1,POP,a,COUNT,*,b,+ AREA:value1#00FF00 LINE1:value2#FF0000 # 傾き # 切片 # スミマセンこれ良くわかってない・・
  25. 25. ■最小二乗法による線形予測 rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE VDEF:a=value1,LSLSLOPE VDEF:b=value1,LSLINT CDEF:value2=value1,POP,a,COUNT,*,b,+ AREA:value1#00FF00 LINE1:value2#FF0000 # 傾き # 切片 # スミマセンこれ良くわかってない・・
  26. 26. ■最小二乗法による線形予測 rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE VDEF:a=value1,LSLSLOPE VDEF:b=value1,LSLINT CDEF:value2=value1,POP,a,COUNT,*,b,+ AREA:value1#00FF00 LINE1:value2#FF0000 hrule(横線)を引くとなお見やすくなります (交点を求めることもできますが今回は割愛) # 傾き # 切片 # スミマセンこれ良くわかってない・・
  27. 27. ■曲線予測 ● PREDICTを使います CDEF:trend=value1,3600,TREND 移動平均を求めて CDEF:value2=86400,-8,3600,trend,PREDICT PREDICTに突っ込 む
  28. 28. ■曲線予測 rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE CDEF:trend=value1,3600,TREND CDEF:value2=86400,-8,3600,trend,PREDICT AREA:value1#00FF00 LINE1:value2#FF0000
  29. 29. ■曲線予測 rrdtool graph test.png --start 1384614000 --end 1385218800 DEF:value1=test.rrd:value1:AVERAGE CDEF:trend=value1,3600,TREND CDEF:value2=86400,-8,3600,trend,PREDICT AREA:value1#00FF00 LINE1:value2#FF0000 こんなグラフが出ます
  30. 30. ■もう少しマシな予測 ● ● ● ● 指数平滑法のうち季節周期も考慮してくれる Holt-Winters が 使えます ただしgraph定義だけではダメで、createする時点から設定が 必要 正直良くわからないので使ったことは無いです 詳しくはこちら http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html
  31. 31. RRDToolのおまけ
  32. 32. ■rrdcached ● ● ● ● rrdtoolをインストールすると付録でついて来ます unix socket またはネットワーク越しでrrdtoolが操作できる デーモン 本来は高頻度のupdateに耐えるためのcacheサーバ 今時SSDだしストレージの書き込み速いしそんなに要らないよ うな
  33. 33. ■rrdcached ● ドキュメントに ● create ● update graph などが使えるように書いてるけど使えなかった (1.4.4) ● ● そこで rrdtool user ML に質問投げてみたら
  34. 34. ■rrdcached trunk versionじゃないとと動かないよそれHAHAHA
  35. 35. ■rrdcached って返事が返ってきた
  36. 36. ■rrdcached マジか
  37. 37. ■rrdcached そんなもんwebのドキュメントに載せんな
  38. 38. ■まとめ ● rrdtool、多機能すぎてお腹いっぱい ● 頑張って使えばいろいろ出来そう ● コマンド叩くのはツライのである程度決め打ちで出来れば便利 ● 予測機能を使っていきたい
  39. 39. ご清聴ありがとうございました

×