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へ登録します

  1. #!/usr/bin/perl
  2.  
  3. $RRD = "/usr/bin/rrdtool"; # rrdtooltpX
  4. $BASEDIR = "/usr/local/HotSaNIC"; # {fBNg
  5. $RRA = $BASEDIR . "/origin/tomcat.rrd"; # rrd pX
  6.  
  7. @month=('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
  8. ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time - 60);
  9. $TODAY = sprintf("%04d%02d%02d", $year + 1900, $mon +1, $mday);
  10. $DT = sprintf("%02d/%03s/%04d:%02d:%02d", $mday ,$month[$mon], $year +1900 , $hour , $min);
  11. $DT1 = sprintf(" %02d:%02d", $hour , $min);
  12.  
  13. $step = 60; # XVu(create w step b)
  14. $time = &get_time(); # _
  15.  
  16. $act[0] = $act[1] = "U";
  17.  
  18. # count A[vsB cron sI
  19. # Tomcat(W2ch) Access Count
  20. $cmdline0 = "grep $DT /var/log/apache2/access_log | grep -i '/w2ch/' | wc -l ";
  21. $act[0]=trim(`$cmdline0`);
  22.  
  23. # GetVideo Count
  24. $cmdline1 = "grep 'getvideo.start' /var/log/tomcat_log.$TODAY | wc -l ";
  25. $act[1]=trim(`$cmdline1`);
  26. $cmdline2 = "ssh 10.8.136.16 \"grep 'getvideo.start' /var/log/tomcat_log.$TODAY | wc -l \" ";
  27. $act[1] = $act[1] + trim(`$cmdline2`) ;
  28.  
  29. # rrdtool update s
  30. $cmdline = "$RRD update $RRA $time:$act[0]:$act[1]";
  31. `$cmdline`;
  32.  
  33. exit();
  34.  
  35. # time bA20buTu[`
  36. sub get_time {
  37. my $time = time();
  38. my $mod = $time % $step;
  39.  
  40. if($mod < $step/2){
  41. return $time - $mod;
  42. } else {
  43. return $time + ($step - $mod);
  44. }
  45. }
  46.  
  47. sub trim {
  48. my $val = shift;
  49. $val =~ s/^\s*(.*?)\s*$/$1/;
  50. return $val;
  51. }

要は、ログをキーワードでgrepして、カウントするだけです。

1分前のデータをカウントするので、登録時に1分前のデータとして、時刻を登録しています

2.グラフ作成
Request数については、棒グラフに、VIDEOは、1日の最大値を表示するようにしました。

こんな感じ

  1. #!/bin/sh
  2.  
  3. cd /usr/local/HotSaNIC/origin
  4.  
  5. set DOC_ROOT="/srv/www/htdocs";
  6.  
  7. /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"
  8.  
  9. /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 "
  10.  
  11. /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 "
  12.  
  13. /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 "
  14.  
  15. /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週間のグラフが作成されます

実際にできたもの→ここ

データさえとれれば、以外と簡単に作れますね。
あとは、見た目の美しさとかにこると面白そうです

Tags for RRDTool::状況監視してみよう


■お知らせ
鯖の電気代が2万/月を超えました。新しい鯖を購入して電気代を下げるようにしましたが、ご協力いただける方がいらっしゃいましたら、よろしくお願いします。
カンパしなくても、鯖は存続しますので、WebMoney余ってるよ~という方だけ、よろしくお願いしますm(__)m
WebMoney ぷちカンパ
カスタム検索