最終更新日: 2010-03-31
Apacheのログを見ていると、攻撃を目的としているのか、 存在していないファイルなどへのアクセスが一時的に増えることがあります。 このような事象を可視化するのもひょっとしたら何かの役に立つかもしれません。
というわけで、次のようなシェルスクリプトを (たとえば/usr/local/libexec/mrtg-apache.shというファイルで) 用意して、
#! /bin/sh export LANG=C temp=/tmp/x.$$ trap 'rm -f $temp*; exit 1' 1 2 15 # clean up files # modify $logfil to your apache log file path logfil=/var/log/apache2/access.log ok='HTTP/[0-9].[0-9]" [23][0-9][0-9] ' fail='HTTP/[0-9].[0-9]" [45][0-9][0-9] ' total=`wc -l $logfil | awk '{print 0+$1}'` ibytes=`grep "$ok" $logfil | wc -l | awk '{print 1000*$1}'` obytes=`grep "$fail" $logfil | wc -l | awk '{print 1000*$1}'` echo $ibytes echo $obytes echo total number of "$logfil" is $total echo "apache" rm -f $temp* exit 0 # EOFmrtg.cfgを以下のようします。
# # mrtg.cfg -- apache log # # raw directory path WorkDir: /path/to/your/mrtg HtmlDir: /path/to/your/mrtg ImageDir: /path/to/your/mrtg LogDir: /path/to/your/mrtg # web based path IconDir: /path/to/your/mrtg # # bits - 得られた値を8倍する (1byte -> 8bits) # perminute - 60倍 (n / sec -> 60n / min) # # absolute - 得られた値を間隔(300秒)で割ってグラフ化 # gauge - 得られた値をそのままグラフ化 # 指定なし - 得られた値と直前の値の差を間隔(300秒)で割ってグラフ化 # # integer - グラフ下の要約部を整数で表示 (小数点ナシ) # withzeroes - ゼロを無視しない # nolegend - 凡例表示しない # Options[_]: growright,perminute,withzeroes,nopercent,integer,nolegend Target[apache]: `/bin/sh /usr/local/libexec/mrtg-apache.sh` MaxBytes[apache]: 1048576 Title[apache]: apache log analysis YLegend[apache]: x1000 ShortLegend[apache]: m counts/min LegendI[apache]: 2XX and 3XX (status ok): LegendO[apache]: 4XX and 5XX (errors): PageTop[apache]: <H1>Apache Log</H1>