Subscribed unsubscribe Subscribe Subscribe

rrdtoolは癒し

この頃はGraphiteやらInfluxDBがrrdtoolに取って代わられつつあるんでしょうが、rrdtoolのコマンド引数はいじってみると意外と楽しいものです(人によりますが)。このあいだ


とか思いつきで言いましたが、とりあえず序の口というか前座というか、とりあえずやって見るだけやってみようと思います

MRTG

とりあえず書くならこんな感じ
f:id:shoichimasuhara:20140409235223p:plain
MRTGのグラフを彷彿とさせますね。コマンドラインはこちら

rrdtool graph shoichi.example.com_loadavg5_1.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE \
    AREA:value1#00FF00:"loadavg5" \

shoichi.example.com_loadavg5.rrd というファイルのvalueというカラムのAVERAGEをvalue1に定義してAREAで書いた、です。LINE1にするとこんな感じ
f:id:shoichimasuhara:20140409235420p:plain

<     AREA:value1#00FF00:"loadavg5" \
---
>     LINE1:value1#00FF00:"loadavg5" \

普通ですね。ところで負荷600ってなんやねん、ってのはたしかSNMPの事情だったはずなので0.01かけておきましょう
f:id:shoichimasuhara:20140409235606p:plain

rrdtool graph shoichi.example.com_loadavg5_3.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE \
    CDEF:value2=value1,0.01,* \
    AREA:value2#00FF00:"loadavg5" \

CDEFでvalue1に0.01をかけてvalue2を定義、AREAで表示としてみました。

ナウなヤングにバカウケなカラー

rrdtool graphには

[-c|--color COLORTAG#rrggbb[aa]]

RRDtool - rrdgraph

というオプションがありまして、これで色を変えれるんですが、サンプルが無いのでサンプル一覧を作りました。赤い部分が該当COLORTAGなんですが、わかりますかね?

ARROW 軸の矢印 f:id:shoichimasuhara:20140410000132p:plain
AXIS 軸の色 f:id:shoichimasuhara:20140410000139p:plain
BACK 背景 f:id:shoichimasuhara:20140410000145p:plain
CANVAS グラフ内側の背景 f:id:shoichimasuhara:20140410000151p:plain
FONT フォント f:id:shoichimasuhara:20140410000241p:plain
FRAME 凡例の枠 f:id:shoichimasuhara:20140410000344p:plain
GRID グリッド f:id:shoichimasuhara:20140410000357p:plain
MGRID Mグリッド f:id:shoichimasuhara:20140410000416p:plain
SHADEA 影A f:id:shoichimasuhara:20140410000422p:plain
SHADEB 影B f:id:shoichimasuhara:20140410000607p:plain

これを踏まえてkibanaとかのような厨2ごころをくすぐるような感じにしてみ…たつもり。こんなんどうですか
f:id:shoichimasuhara:20140410000921p:plain

rrdtool graph shoichi.example.com_loadavg5_5.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    --color FONT#FF8C00 \
    --color ARROW#FF8C00 \
    --color AXIS#FF8C00 \
    --color BACK#222222 \
    --color CANVAS#000000 \
    --color SHADEA#222222 \
    --color SHADEB#222222 \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE \
    CDEF:value2=value1,0.01,* \
    AREA:value2#00FF00:"loadavg5" \

LINE1のほうがかっこ良さそう?
f:id:shoichimasuhara:20140410001017p:plain
最近なんかこうなめらかな感じのほうがウケるようなので

[-E|--slope-mode]

RRDtool - rrdgraph

というオプションをつけてみた
f:id:shoichimasuhara:20140410001121p:plain
さらにそれっぽく?するためにAREAを重ねてLINE2にするとこうなる
f:id:shoichimasuhara:20140410001201p:plain

rrdtool graph shoichi.example.com_loadavg5_8.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    --color FONT#FF8C00 \
    --color ARROW#FF8C00 \
    --color AXIS#FF8C00 \
    --color BACK#222222 \
    --color CANVAS#000000 \
    --color SHADEA#222222 \
    --color SHADEB#222222 \
    --slope-mode \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE \
    CDEF:value2=value1,0.01,* \
    AREA:value2#004000 \
    LINE2:value2#00FF00:"loadavg5" \

さらに装飾線

CPUのコア数の線なんて描いてみると良さそうな?考えるの面倒なのでHRULEベタ書きで
f:id:shoichimasuhara:20140410001347p:plain

>     HRULE:2#FF0000:"cpu core":dashes=4 \

コア数を越えてるところの背景塗りつぶしてみますか
f:id:shoichimasuhara:20140410001524p:plain
塗りつぶしは"GTやらLTで比較してINFをかけてからAREA"でやります

rrdtool graph shoichi.example.com_loadavg5_10.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    --color FONT#FF8C00 \
    --color ARROW#FF8C00 \
    --color AXIS#FF8C00 \
    --color BACK#222222 \
    --color CANVAS#000000 \
    --color SHADEA#222222 \
    --color SHADEB#222222 \
    --slope-mode \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE \
    CDEF:value2=value1,0.01,* \
    CDEF:over1=value2,2,GT,INF,* \
    AREA:over1#662222 \
    AREA:value2#004000 \
    LINE2:value2#00FF00:"loadavg5" \
    HRULE:2#FF0000:"cpu core":dashes=4 \

さらに、1週間前のグラフを描いておくと比較するのに便利なので描いてみましょう

rrdtool graph shoichi.example.com_loadavg5_11.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    --color FONT#FF8C00 \
    --color ARROW#FF8C00 \
    --color AXIS#FF8C00 \
    --color BACK#222222 \
    --color CANVAS#000000 \
    --color SHADEA#222222 \
    --color SHADEB#222222 \
    --slope-mode \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE \
    CDEF:value2=value1,0.01,* \
    CDEF:value3=value2 \
    SHIFT:value3:604800 \
    CDEF:over1=value2,2,GT,INF,* \
    AREA:over1#662222 \
    AREA:value2#004000 \
    LINE2:value2#00FF00:"loadavg5" \
    LINE1:value3#FF8C00:"1 week ago" \
    HRULE:2#FF0000:"cpu core":dashes=4 \

説明するとここのCDEF

    CDEF:value3=value2 \

でいったんvalue3に渡して

    SHIFT:value3:604800 \

ここで1週間分ずらしてます。でできたのがこちら
f:id:shoichimasuhara:20140410002000p:plain
…凡例出てるけどグラフ出てねぇ
それもそのはず

    --start end-1w --end now \

なので1週間分しかデータがないので線も引けない。ということで2週間分のデータをDEFでとりましょう

<     DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE \
---
>     DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE:start=end-2w \

線が出てきました(下の細いオレンジの線)
f:id:shoichimasuhara:20140410002237p:plain
"1週間前の値の2倍を現在の値が超えた区域を塗りつぶす" をやってみたいと思います

rrdtool graph shoichi.example.com_loadavg5_13.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    --color FONT#FF8C00 \
    --color ARROW#FF8C00 \
    --color AXIS#FF8C00 \
    --color BACK#222222 \
    --color CANVAS#000000 \
    --color SHADEA#222222 \
    --color SHADEB#222222 \
    --slope-mode \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE:start=end-2w \
    CDEF:value2=value1,0.01,* \
    CDEF:value3=value2 \
    SHIFT:value3:604800 \
    CDEF:over1=value2,2,GT,INF,* \
    CDEF:over2=value3,2,*,value2,LT,INF,* \
    AREA:over1#662222 \
    AREA:over2#442244 \
    AREA:value2#004000 \
    LINE2:value2#00FF00:"loadavg5" \
    LINE1:value3#FF8C00:"1 week ago" \
    HRULE:2#FF0000:"cpu core":dashes=4 \

f:id:shoichimasuhara:20140410002714p:plain
さっき塗りつぶしたのが上書きされてしまいました…ので透過つかいますかね

<     AREA:over2#442244 \
---
>     AREA:over2#44224480 \

rrdtoolの色指定は RGB透過率 だったりします。でグラフはこんな感じ
f:id:shoichimasuhara:20140410002856p:plain
あとノリで1日移動平均線描いて見ました
f:id:shoichimasuhara:20140410002923p:plain
最終のコマンドオプションはこちら

rrdtool graph shoichi.example.com_loadavg5_15.png \
    --title "load average 5 of shoichi.example.com" \
    --start end-1w --end now \
    --width 400 \
    --height 180 \
    --color FONT#FF8C00 \
    --color ARROW#FF8C00 \
    --color AXIS#FF8C00 \
    --color BACK#222222 \
    --color CANVAS#000000 \
    --color SHADEA#222222 \
    --color SHADEB#222222 \
    --slope-mode \
    DEF:value1=shoichi.example.com_loadavg5.rrd:value:AVERAGE:start=end-2w \
    CDEF:value2=value1,0.01,* \
    CDEF:value3=value2 \
    SHIFT:value3:604800 \
    CDEF:over1=value2,2,GT,INF,* \
    CDEF:over2=value3,2,*,value2,LT,INF,* \
    CDEF:sm=value2,86400,TREND \
    AREA:over1#662222 \
    AREA:over2#44224480 \
    AREA:value2#004000 \
    LINE2:value2#00FF00:"loadavg5" \
    LINE1:value3#FF8C00:"1 week ago" \
    LINE2:sm#FFFFFF80:"trend 1 day" \
    HRULE:2#FF0000:"cpu core":dashes=4 \

デザインの問題なのでデザイン力や色彩感覚の無い僕では限界ありますが、みなさんもいじってみてカッコいいグラフを描いてみてください。