- 自鯖の状況
- 1st Server
- 1st@Apps::Apache
- 1st@Apps::MYSQL
- 1st@Apps::PostgreSQL
- 1st@Apps::W2Ch利用状況
- 1st@Apps::W2Chセッション数
- 1st@Apps::iptables
- 1st@Sensor::CPU温度
- 1st@Sensor::FAN回転数
- 1st@System::CPU
- 1st@System::CPU-0
- 1st@System::CPU-1
- 1st@System::CPU-2
- 1st@System::CPU-3
- 1st@System::LoadAvg
- 1st@System::Memory
- 1st@System::Process
- 1st@System::SWAP
- 1st@System::Uptime
- 1st@System::Users
- 1st@Traffic::Ether0
- 1st@Traffic::PPP0
- 1st@Traffic::Wlan
- iptables::ログ集計
- 1st Server
RRDTool::状況監視してみよう
今回は、W2chの鯖としてどれぐらいのアクセス状況なのかを、
知りたくなったので、rrdtoolを用いて、グラフ化してみました。
※rrdtoolのインストールは、省きます
材料
・ApacheのAccesslog
・TomcatのCatalina.out
まず、アクセス数ですが、Apacheログから、/w2ch/ 含む行を1分後に計測、
Tomcatログからは、w2chがはき出す、YouTube等のVideoの変換数を
グラフ化することにします
0.rrdの作成
いろいろと調べたところ、こんな感じです
rrdtool create tomcat.rrd \
DS:CNT:GAUGE:600:U:U \
DS:VIDEO:GAUGE:600:U:U \
RRA:LAST:0.5:6:700 \
RRA:LAST:0.5:24:775 \
RRA:LAST:0.5:288:797 \
RRA:LAST:0.5:1:600 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 \
RRA:AVERAGE:0.5:24:775 \
RRA:AVERAGE:0.5:288:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:6:700 \
RRA:MAX:0.5:24:775 \
RRA:MAX:0.5:288:797 \
RRA:MIN:0.5:1:600 \
RRA:MIN:0.5:6:700 \
RRA:MIN:0.5:24:775 \
RRA:MIN:0.5:288:797
アクセス数は、CNTという名前、Videoは、VIDEOという名前に設定します。
ついで、1分毎のデータを蓄積するために、
LAST=瞬間値
AVERAGE=平均
MAX=最大値
MIN=最小値
をそれぞれ、
5分おきの600個のサンプル (これは2日と二時間分) 5×600 = 224×60 + 60×2
30分ごとの700個のサンプル (12.5日分に加えて、2日と2時間) 30×700 = 21000 = 12.5×(60×24) + 2×(24×60) + 2×60
2時間おきの775個のサンプル (上のものに加えて、50日間)
1日ごとのサンプルが797個 (上のものに加えて732日間、すなわち797日)
として、設定しました。
1.データの取り込み
1分単位でCronから起動して、RRDへ登録します
#!/usr/bin/perl $RRD = "/usr/bin/rrdtool"; # rrdtooltpX $BASEDIR = "/usr/local/HotSaNIC"; # {fBNg $RRA = $BASEDIR . "/origin/tomcat.rrd"; # rrd pX @month=('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); $step = 60; # XVu(create w step b) $time = &get_time(); # _ $act[0] = $act[1] = "U"; # count A[vsB cron sI # Tomcat(W2ch) Access Count $cmdline0 = "grep $DT /var/log/apache2/access_log | grep -i '/w2ch/' | wc -l "; # GetVideo Count $cmdline1 = "grep 'getvideo.start' /var/log/tomcat_log.$TODAY | wc -l "; $cmdline2 = "ssh 10.8.136.16 \"grep 'getvideo.start' /var/log/tomcat_log.$TODAY | wc -l \" "; # rrdtool update s $cmdline = "$RRD update $RRA $time:$act[0]:$act[1]"; `$cmdline`; # time bA20buTu[` sub get_time { my $mod = $time % $step; if($mod < $step/2){ return $time - $mod; } else { return $time + ($step - $mod); } } sub trim { my $val = shift; $val =~ s/^\s*(.*?)\s*$/$1/; return $val; }
要は、ログをキーワードでgrepして、カウントするだけです。
1分前のデータをカウントするので、登録時に1分前のデータとして、時刻を登録しています
2.グラフ作成
Request数については、棒グラフに、VIDEOは、1日の最大値を表示するようにしました。
こんな感じ
#!/bin/sh cd /usr/local/HotSaNIC/origin set DOC_ROOT="/srv/www/htdocs"; /usr/bin/rrdtool graph /srv/www/htdocs/tomcat_halfhour.png -s "-3600" -x "MINUTE:1:MINUTE:5:MINUTE:10:60:%H:%M" --imgformat PNG --title "Tomcat Request&Video View:1Hour" --vertical-label "Request/min." DEF:CNT=tomcat.rrd:CNT:LAST AREA:CNT#00CF00:"Request/min." GPRINT:CNT:LAST:"cur\: %4.0lf /" GPRINT:CNT:AVERAGE:"ave\: %4.0lf /" GPRINT:CNT:MIN:"min\: %4.0lf /" GPRINT:CNT:MAX:"max\: %4.0lf\n" DEF:VIDEO=tomcat.rrd:VIDEO:LAST LINE:VIDEO#0000FF:"Video day sum." GPRINT:VIDEO:LAST:"cur\: %4.0lf" /usr/bin/rrdtool graph /srv/www/htdocs/tomcat_hour.png -s "-7200" -x "MINUTE:1:MINUTE:15:MINUTE:15:60:%H:%M" --imgformat PNG --title "Tomcat Request&Video View:4Hour" --vertical-label "Request/min." DEF:CNT=tomcat.rrd:CNT:LAST AREA:CNT#00CF00:"Request/min." GPRINT:CNT:LAST:"cur\: %4.0lf /" GPRINT:CNT:AVERAGE:"ave\: %4.0lf /" GPRINT:CNT:MIN:"min\: %4.0lf /" GPRINT:CNT:MAX:"max\: %4.0lf\n" DEF:VIDEO=tomcat.rrd:VIDEO:LAST LINE:VIDEO#0000FF:"Video day sum." GPRINT:VIDEO:LAST:"cur\: %4.0lf " /usr/bin/rrdtool graph /srv/www/htdocs/tomcat_halfday.png -s "-43200" -x "MINUTE:30:HOUR:1:HOUR:2:1800:%H:%M" --imgformat PNG --title "Tomcat Request&Video View:Half Day" --vertical-label "Request/min." DEF:CNT=tomcat.rrd:CNT:LAST AREA:CNT#00CF00:"Request/min." GPRINT:CNT:LAST:"cur\: %4.0lf /" GPRINT:CNT:AVERAGE:"ave\: %4.0lf /" GPRINT:CNT:MIN:"min\: %4.0lf /" GPRINT:CNT:MAX:"max\: %4.0lf\n" DEF:VIDEO=tomcat.rrd:VIDEO:LAST LINE:VIDEO#0000FF:"Video day sum." GPRINT:VIDEO:LAST:"cur\: %4.0lf " /usr/bin/rrdtool graph /srv/www/htdocs/tomcat_day.png -x "HOUR:1:HOUR:2:HOUR:4:3600:%H:%M" --imgformat PNG --title "Tomcat Request&Video View:1Day" --vertical-label "Request/min." DEF:CNT=tomcat.rrd:CNT:LAST AREA:CNT#00CF00:"Request/min." GPRINT:CNT:LAST:"cur\: %4.0lf /" GPRINT:CNT:AVERAGE:"ave\: %4.0lf /" GPRINT:CNT:MIN:"min\: %4.0lf /" GPRINT:CNT:MAX:"max\: %4.0lf\n" DEF:VIDEO=tomcat.rrd:VIDEO:LAST LINE:VIDEO#0000FF:"Video day sum." GPRINT:VIDEO:LAST:"cur\: %4.0lf " /usr/bin/rrdtool graph /srv/www/htdocs/tomcat_week.png -s "-604800" -x "HOUR:6:HOUR:24:HOUR:24:86400:%m/%d" --imgformat PNG --title "Tomcat Request&Video View:1Week" --vertical-label "Request/min." DEF:CNT=tomcat.rrd:CNT:LAST AREA:CNT#00CF00:"Request/min." GPRINT:CNT:LAST:"cur\: %4.0lf /" GPRINT:CNT:AVERAGE:"ave\: %4.0lf /" GPRINT:CNT:MIN:"min\: %4.0lf /" GPRINT:CNT:MAX:"max\: %4.0lf\n" DEF:VIDEO=tomcat.rrd:VIDEO:LAST LINE:VIDEO#0000FF:"Video day sum." GPRINT:VIDEO:LAST:"cur\: %4.0lf "
これで、
1時間、4時間、12時間、24時間、1週間のグラフが作成されます
実際にできたもの→ここ
データさえとれれば、以外と簡単に作れますね。
あとは、見た目の美しさとかにこると面白そうです

