rrdtool fetchをフォーマットするzsh関数

ネットワークの監視のためにトラフィックのデータをmrtgcactiでとっていると,生データを見たくなる時が時々あるのだけれども,rrdtool fetchのデフォルトの表示では分かり辛いのでフォーマットするzshの関数を書いてみた.

ひとまず1カラム目のUNIX timeをフォーマットする関数.

rrd-fetch () { rrdtool fetch $@ | gawk -F : '{ s = $1; if (match($1, /^[0-9]+/)>0) { cmd = "date -r "$1" +\"%Y/%m/%d %H:%M:%S\""; cmd | getline s; close(cmd);} print s, $2}' }

こっちはLinux用(dateコマンドの仕様が違うので)

rrd-fetch () { rrdtool fetch $@ | gawk -F : '{ s = $1; if (match($1, /^[0-9]+/)>0) { cmd = "date -d @"$1" +\"%Y/%m/%d %H:%M:%S\""; cmd | getline s; close(cmd);} print s, $2}' }

更にトラフィックデータ用にMbpsで表示する関数.

rrd-fetch-mb () { rrd-fetch $@ | gawk '{ s = $1" "$2; i=2; while (++i <= NF){ if (match($i, /nan/)==0) {s = s" "sprintf("% 7.1f",strtonum($i)*8/1024/1024) } else { s = s"     nan" } } print s }' }

実行するとこんな感じ.

$ rrd-fetch-mb hoge.rrd AVERAGE
2012/01/06 23:35:00   249.2   428.3
2012/01/06 23:40:00   272.3   426.5
2012/01/06 23:45:00   241.5   445.9
2012/01/06 23:50:00     nan     nan
2012/01/06 23:55:00     nan     nan

トラフィックデータの場合大体CFはAVERAGEなのでそこまで関数にハードコートしてもいいかも.