[ SERVER ]

CentOS 5.5

Swatch でサーバーログを監視する

2011/01/06 Tomohiro Kumagai

□ ログ監視ツール Swatch

Linux のログを監視するツールとして Swatch というものがあります。

これを利用することで、あらかじめ定めたルールに従ったログが検出されると、メール通知を行ったり、何かプログラムを実行するといったことができるようになります。

 

□ Swatch のインストール

今回は CentOS 5.5 に Swatch を yum を用いてインストールを行ってみようと思います。

そのためには、平成 23 年 1 月 06 日現在、yum リポジトリとして "rpmforge"を追加する必要があります。

リポジトリの追加方法については EZ-NET: Linux の使い方: CentOS 5.4 のシステムアップデート取得先としてリポジトリを追加する に記してありますので、必要に応じてこちらも参照してください。

 

"rpmforge" リポジトリを追加したら、次のようにして Swach のインストールを行います。

yum --enablerepo=rpmforge install swatch

このようにすることで、平成 23 年 1 月 06 日の時点では "swatch 3.1.1-1.el5.rf" というバージョンをインストールすることができました。

 

□ Swatch の設定環境を整える

Swatch のインストールが完了したら、続いて監視のための設定準備を行います。

設定ファイルは通常、"~/.swatchrc" に記載するように設計されているようですが、今回は "/etc/swatch/" というディレクトリーを作成して、そこに監視設定を用意したいと思います。

mkdir /etc/swatch

このようにして "/etc/swatch" ディレクトリーを作成したら、この中に設定ファイルを用意します。

例えば "/var/log/messages" から "PPTP" の接続についてを検出して、接続があった場合にメールで通知したいときには、"/etc/swatch/messages.conf" を作成して、次のように設定ファイルを記述する感じです。

#logfile: /var/log/messages

 

watchfor /pptpd\[\d+\]: remote IP address (\w+)/

mail=admin@domain.xx.jp,subject=Detect PPTP Connection

最初の 1 行目で、監視するログファイルを指定します。

ログファイル名を "#logfile:" に続けて指定していますが、これは、次に用意する起動スクリプト用の独自の形式になっています。

それ以降は、"watchfor /検索パターン/" で始まり、それに一致した場合の処理を次の行に記しています。これは Swatch の設定ファイルの記載方法の通りに記載します。検索パターンには正規表現によるマッチパターンを指定することが可能でした。

今回は mail 送信だけの記載となっていますが、このほかにも "echo" で画面にメッセージを表示したり、"bell" で指定した回数の Beep オンを鳴らしたり、"exec" で指定したコマンドを実行させたりといったことができるようでした。

なお、設定ファイルはログファイルごとに用意する必要があります。

 

そして、起動用のスクリプトを用意します。

平成 23 年 1 月 6 日現在、Swatch パッケージには起動スクリプトが用意されていないようでしたので、次のような起動スクリプト を "/etc/rc.d/init.d/swatch" として作成しておくことにします。

#!/bin/sh
#
# Swatch
#
# chkconfig: 345 90 35
# description: swatch log monitoring
#

SWATCH=/usr/bin/swatch
LOCKFILE=/var/lock/subsys/swatch
CONFPATH=/etc/swatch
PROCFILE_PATH=/var/run
CONFFILE=*.conf
WORKPATH=/tmp
LOGFILE=/var/log/swatch.log

. /etc/rc.d/init.d/functions

start()
{
	RESULT_CODE=0
	
	if [ -f ${LOCKFILE} ]; then
	
		echo "Swatch is already running."
		exit 1

	else
	
		touch ${LOCKFILE}
				
	fi
	
	PROCCOUNT=0
	
	for CONFIGFILE in ${CONFPATH}/${CONFFILE}
	do
		if [ -f ${CONFIGFILE} ]; then
		
			PROCCOUNT=`expr ${PROCCOUNT} + 1`
			
			TARGET_LOG=`head -1 ${CONFIGFILE} | awk 'BEGIN { FS = ":" }; { sub(/([ \t]+$|^[ \t]+)/, "", $2); print $2 }'`
	
			echo -n "Starting swatch: ${TARGET_LOG}: "
			
			daemon ${SWATCH} \
				--config-file ${CONFIGFILE} \
				--tail-file ${TARGET_LOG} \
				--script-dir=${WORKPATH} \
				--awk-field-syntax \
				--daemon \
				--pid-file ${PROCFILE_PATH}/swatch.${PROCCOUNT}.pid \
					2>> ${LOGFILE}
			
			RETVAL=$?
			echo
			
			if [ ${RETVAL} != 0 ]; then
			
				RESULT_CODE=${RETVAL};
			
			fi
		
		else
		
			RESULT_CODE=7
		
		fi
		
	done
		
	return ${RESULT_CODE}
}

stop()
{
	if [ -f ${LOCKFILE} ]; then
	
		for PID in ${PROCFILE_PATH}/swatch.*.pid
		do
			if [ -f ${PID} ]; then
			
				PID_NUMBER=`cat ${PID}`
				
				echo -n "Shutting down swatch (pid ${PID_NUMBER}): "
			
				killproc -p ${PID}
				RETVAL=$?
				
				rm -f ${PID}
				
				echo
			
			else
			
				RETVAL=7
				
			fi
			
		done
	fi
		
	rm -f ${LOCKFILE}
	rm -f ${WORKPATH}/.swatch_script.*
	
	return ${RETVAL}
}

status()
{
	if [ -f ${LOCKFILE} ]; then
	
		echo -n "Swatch (pid :"
		
		for PID in ${PROCFILE_PATH}/swatch.*.pid
		do
			if [ -f ${PID} ]; then
			
				echo -n " `cat ${PID}`"
				
			fi
			
		done
		
		echo ") is running."
	
	else
	
		echo "Swatch is stopped."
		
	fi
	
	return 0
}

case "$1" in

	start)
		start
		RETVAL=$?
		;;
		
	stop)
		stop
		RETVAL=$?
		;;
		
	restart)
		stop
		start
		RETVAL=$?
		;;
		
	status)
		status
		RETVAL=$?
		;;
		
	*)
		echo "Usage: swatch {start|stop|restart|status}"
		exit 1
esac

exit ${RETVAL}


このような起動スクリプトを作成したら、今回は CentOS 5.5 なので、次のようにして起動スクリプトをシステムに登録しておきます。

chkconfig --add swatch

これで "service" コマンドを使用して Swatch を制御することができるようになりました。

 

後は、次のようにして Swatch を起動させます。

service swatch start

Linux 起動時に自動的に Swatch を起動させたい場合には、次のようにして自動起動させるようにしておきます。

chkconfig swatch on

正しく起動できたら、設定ファイルに記載したパターンのログが発生するようなアクセスを行って、期待通りの動作がお行われることを確認しておくと良いと思います。

 


 

カスタム検索

copyright © Tomohiro Kumagai @ EasyStyle G.K.
contact me: please from mail-form page.