Network Users' Group ``wheel'' / Dai ISHIJIMA's Page /
RTA55i / MRTGでApacheのログカウント
wgetでMRTGその2netstatで
拒否パケットをSNMPを使わずにifconfigで

最終更新日: 2010-03-31


Apacheのログカウントを可視化


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>

ご質問などありましたらお気軽に