1秒間隔で取得したsar -n DEVの値から送受信パケット数、キロバイト数、sar -uからCPU使用率をrrdtoolでグラフ化したのでそのメモを残します。
ksar使える環境なら、そっちの方が早いと思います。
Debian/lenny+rrdtoolバージョン1.3.1-4
全体を通してhttp://www.itmedia.co.jp/enterprise/articles/0705/30/news022.htmlを参考にしました。コマンドの各パラメータについても説明されています。
本家ドキュメント
http://www.mrtg.org/rrdtool/doc/index.en.html
-
sysstatによるモニタリング
sar -o sar.log 1 7200 -
1のログから対象とするデータを抜き出しテキスト化
sar -n DEV -f sar.log|grep eth0|grep -v Ave > eth0
sar -u -f sar.log|grep all|grep -v Ave > cpu -
データベースの作成およびデータベースへの登録
``` {lang="bash" line="1"}
!/bin/sh -x
掃除
rm -rf ./eth0andcpu.rrd
変数の用意(システム時刻、全体行数、現在行)
declare -i sysclock declare -i last_line declare -i current_line
システム時間は取ったログの開始時刻
例)date -d '2011/11/20 16:36:19' '+%s'
sysclock=1291883460
データベースの作成
rrdtool create eth0andcpu.rrd --start $((sysclock - 1)) --step 1
DS:rxpps:GAUGE:5:0:U
DS:txpps:GAUGE:5:0:U
DS:rxkBps:GAUGE:5:0:U
DS:txkBps:GAUGE:5:0:U
DS:cpu_idle:GAUGE:5:0:U
RRA:LAST:0.5:1:3600ループ処理準備
sysstatの結果から全体行数を取得
last_line=$(wc -l eth0|awk -F" " '{print $1}')
現在行の初期化
current_line=1
ループ処理開始
1行目から始めて全体行数以下の間実行
while [ ${current_line} -le ${last_line} ] do
意味ない
echo ${current_line}
各入力用変数に値を入れていく
val_rxpps=$(awk -v val="${current_line}" -F" " 'NR == val { print $4 }' ./eth0) val_txpps=$(awk -v val="${current_line}" -F" " 'NR == val { print $5 }' ./eth0) val_rxkBps=$(awk -v val="${current_line}" -F" " 'NR == val { print $6 }' ./eth0) val_txkBps=$(awk -v val="${current_line}" -F" " 'NR == val { print $7 }' ./eth0) val_cpu_idle=$(awk -v val="${current_line}" -F" " 'NR == val { print $9 }' ./cpu)
意味ない。
echo $val_rxpps
echo $val_txpps
echo $val_rxkBps
echo $val_txkBps
echo $val_cpu_idle
データベースの更新
rrdtool update eth0andcpu.rrd ${sysclock}:${val_rxpps}:${val_txpps}:${val_rxkBps}:${val_txkBps}:${val_cpu_idle}
現在行をインクリメント
current_line=$((current_line + 1))
システム時間もインクリメント。stepが1sなので+1。合わせなかったらどうなる?
sysclock=$((sysclock + 1)) done
ループ処理終了
```
-
グラフの作成
``` {lang="bash" line="1"}
!/bin/sh -x
掃除
rm -rf ./eth0andcpu.png
グラフ作成
rrdtool graph eth0andcpu.png --imgformat PNG -s 1291883460 -e 1291887000 --x-grid MINUTE:1:MINUTE:10:MINUTE:10:0:"%H:%M"
DEF:txpps=eth0andcpu.rrd:txpps:LAST
DEF:txkBps=eth0andcpu.rrd:txkBps:LAST
DEF:rxpps=eth0andcpu.rrd:rxpps:LAST
CDEF:r_rxpps=rxpps,-1,
DEF:rxkBps=eth0andcpu.rrd:rxkBps:LAST
CDEF:r_rxkBps=rxkBps,-1,
DEF:cpu_idle=eth0andcpu.rrd:cpu_idle:LAST
CDEF:r_cpu_idle=100,cpu_idle,-
AREA:txpps#c8c2be:"txpps"
AREA:txkBps#887f7a:"txkBps"
AREA:r_rxpps#f2a0a1:"rxpps"
AREA:r_rxkBps#c53d43:"rxkBps"
LINE1:r_cpu_idle#FF0000:"cpu"
-w 500 -h 350 ```
で、一番上のグラフが出来上がります。
個人的に気をつけないといけないなと思った事↓
rrdtool create時、DS、RRAをちゃんと考えて設定する事
rrdtool update時、抜き出してる数値が正しいか確認する事
rrdtool graph時、面倒くさいけど描画する順番とか色とか気をつける事。体裁も大事。