最終更新日: 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
	# EOF
mrtg.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>