rrdtool基礎から応用

39
RRDTool基礎から応用 株式会社はてな システムプラットホーム部 id:shoichimasuhara

Upload: shoichi-masuhara

Post on 10-Jun-2015

5.977 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Rrdtool基礎から応用

RRDTool基礎から応用株式会社はてな

システムプラットホーム部id:shoichimasuhara

Page 2: Rrdtool基礎から応用

■自己紹介

● id:shoichimasuhara

● Twitter:@shoichimasuhara

● 所属:株式会社はてな システムプラットホーム部

● 経歴

● 塾講師

● 陸上自衛官

● 鯖管 (レンサバ)

● はてなインフラ (イマココ)

Page 3: Rrdtool基礎から応用

RRDTool基礎

Page 4: Rrdtool基礎から応用

■RRDToolって?

● RRD(Round Robin Database)を操作するためのツール (そのままですね)

● 今回はTobias Oetikerさんのrrdtool 1.4.7 について話します

http://oss.oetiker.ch/rrdtool/

● 大雑把に言うと、ラウンドロビンデータベースを

● 作って(rrdtool create)

● 更新して(rrdtool update)

● グラフを書く(rrdtool graph)

ためのものです

Page 5: Rrdtool基礎から応用

■RRD(Round Robin Database)って?

● データサイズの変わらないただ一つでもないデータベース

● ラウンドロビン方式でデータが格納されます

● 古いものは期限が来ると破棄されます

● rrdtoolにおけるRRDは基本的に時系列データを蓄積します

Page 6: Rrdtool基礎から応用

■RRD(Round Robin Database)って?

● イメージするなら円形状のデータストア

データを順番に入れていく

Page 7: Rrdtool基礎から応用

■RRD(Round Robin Database)って?

● イメージするなら円形状のデータストア

1周したら古いデータを破棄

Page 8: Rrdtool基礎から応用

■RRDの作成

● rrdtool create を使います

● コマンドはこんな感じ

rrdtool create ファイル名 オプション スキーマ定義

● オプションには

--start 初期時刻

--step 更新間隔 (先ほどの輪の小さい丸の間隔)

などがあります

Page 9: Rrdtool基礎から応用

■スキーマ定義

● 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で共通

● 複数定義できる

Page 10: Rrdtool基礎から応用

■作成サンプル

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 \

Page 11: Rrdtool基礎から応用

■RRDの更新

● rrdtool update を使います

● (実は微妙に奥が深かったりしますが) ここでは単純にタイムスタンプ:値:値:値... をぶち込むだけ

rrdtool update ファイル名 1385766415:10:20

Page 12: Rrdtool基礎から応用

■グラフの描画

● rrdtool graph を使います

● rrdtool の中で一番複雑

rrdtool graph 出力画像ファイル名 オプション グラフ定義

● 詳しく説明すると日がくれるのでとりあえず例

Page 13: Rrdtool基礎から応用

■グラフサンプル

● このコマンドを実行するとこんなグラフがかけます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 \

Page 14: Rrdtool基礎から応用

■DEFとCDEFとVDEFについて

● DEF (data definition)

データソースからデータを定義します (時系列データ)

● CDEF (data calculation)

他の時系列データから計算をして新しい時系列データを定義します (時系列データ)

● VDEF (variable definition)

時系列データなどからひとつの値を定義します(値)

Page 15: Rrdtool基礎から応用

RRDTool応用

Page 16: Rrdtool基礎から応用

■グラフの比較

● 先ほどのグラフの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 \

Page 17: Rrdtool基礎から応用

■グラフの比較

● 先ほどのグラフの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 \

Page 18: Rrdtool基礎から応用

■ちょっと説明

● CDEF:value3=value1,value2,GT,INF,*

● 何やってるの?

● value1 と

● value2 を

● GT ( > ) で比較して

● INF(無限大特殊変数) を

● * (かけ) た

Page 19: Rrdtool基礎から応用

■移動平均線を描いてみる

● TRENDを使います

● 1日移動平均線の定義だとこんな感じ

CDEF:value2=value1,86400,TREND

Page 20: Rrdtool基礎から応用

■移動平均線を描いてみる

● TRENDを使います

● 1日移動平均線の定義だとこんな感じ

CDEF:value2=value1,86400,TREND 簡単便利

Page 21: Rrdtool基礎から応用

■過去のグラフとの重ね合わせ

● SHIFTを使います

● CDEF:value2=value1 CDEFで一度違う変数に渡して

● SHIFT:value2:86400 ずらします

Page 22: Rrdtool基礎から応用

■過去のグラフとの重ね合わせ

● SHIFTを使います

● CDEF:value2=value1 CDEFで一度違う変数に渡して

● SHIFT:value2:86400 ずらします

● 例では1日ずらしただけですが、一週間前のグラフを表示すると異常がわかりやすくて便利です

Page 23: Rrdtool基礎から応用

■最小二乗法による線形予測

● LSL(Least Squares Line)機能を使います

● データから y=ax+b の形を求める

● LSLSLOPE で a (傾き)を

● LSLINT で b (切片)を求めて

● CDEFで直線の時系列データを定義します

Page 24: Rrdtool基礎から応用

■最小二乗法による線形予測 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 \

Page 25: Rrdtool基礎から応用

■最小二乗法による線形予測 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 \

Page 26: Rrdtool基礎から応用

■最小二乗法による線形予測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(横線)を引くとなお見やすくなります (交点を求めることもできますが今回は割愛)

Page 27: Rrdtool基礎から応用

■曲線予測

● PREDICTを使います

CDEF:trend=value1,3600,TREND 移動平均を求めて

CDEF:value2=86400,-8,3600,trend,PREDICT PREDICTに突っ込む

Page 28: Rrdtool基礎から応用

■曲線予測 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 \

Page 29: Rrdtool基礎から応用

■曲線予測 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 \

こんなグラフが出ます

Page 30: Rrdtool基礎から応用

■もう少しマシな予測

● 指数平滑法のうち季節周期も考慮してくれる Holt-Winters が使えます

● ただしgraph定義だけではダメで、createする時点から設定が必要

● 正直良くわからないので使ったことは無いです

● 詳しくはこちら http://oss.oetiker.ch/rrdtool/doc/rrdcreate.en.html

Page 31: Rrdtool基礎から応用

RRDToolのおまけ

Page 32: Rrdtool基礎から応用

■rrdcached

● rrdtoolをインストールすると付録でついて来ます

● unix socket またはネットワーク越しでrrdtoolが操作できるデーモン

● 本来は高頻度のupdateに耐えるためのcacheサーバ

● 今時SSDだしストレージの書き込み速いしそんなに要らないような

Page 33: Rrdtool基礎から応用

■rrdcached

● ドキュメントに

● create

● update

● graph

などが使えるように書いてるけど使えなかった (1.4.4)

● そこで rrdtool user ML に質問投げてみたら

Page 34: Rrdtool基礎から応用

■rrdcached

trunk versionじゃないとと動かないよそれHAHAHA

Page 35: Rrdtool基礎から応用

■rrdcached

って返事が返ってきた

Page 36: Rrdtool基礎から応用

■rrdcached

マジか

Page 37: Rrdtool基礎から応用

■rrdcached

そんなもんwebのドキュメントに載せんな

Page 38: Rrdtool基礎から応用

■まとめ

● rrdtool、多機能すぎてお腹いっぱい

● 頑張って使えばいろいろ出来そう

● コマンド叩くのはツライのである程度決め打ちで出来れば便利

● 予測機能を使っていきたい

Page 39: Rrdtool基礎から応用

ご清聴ありがとうございました