FuelPHP のログを swatch で監視する方法
FuelPHP のログファイルを swatch でリアルタイム監視する方法です。
CentOS 6.3 を前提としています。
swatch のインストール
$ sudo yum install swatch $ sudo yum install perl-Time-HiRes perl-File-Tail
必要なファイルの準備
epel の swatch パッケージには起動スクリプトが含まれていません。ここでは、FuelPHP 監視用に特化した起動スクリプトなどを用意します。
フォルダの準備
$ sudo mkdir /var/log/swatch $ sudo mkdir /var/run/swatch
起動スクリプト
$ sudo vi /etc/rc.d/init.d/swatch-fuelphp
#!/bin/sh # # swatch-fuelphp Startup script for Swatch for FuelPHP # # chkconfig: 2345 90 35 # description: FuelPHP log watching with Swatch. # processname: swatch # config: /etc/swatch/fuelphp/*.swatch # config: /etc/swatch/fuelphp/*.conf # pidfile: /var/run/swatch/swatch-fuelphp.*.pid # Source function library. . /etc/rc.d/init.d/functions SWATCH=/usr/bin/swatch LOCKFILE=/var/lock/subsys/swatch-fuelphp CONFPATH=/etc/swatch/fuelphp PROCFILE_PATH=/var/run/swatch CONFFILE=*.swatch WORKPATH=/etc/swatch LOGFILE=/var/log/swatch/swatch-fuelphp.log start() { RESULT_CODE=0 if [ -f ${LOCKFILE} ]; then echo "Swatch for FuelPHP 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` # get the site config file name SITECONF="${CONFPATH}/`basename ${CONFIGFILE} .swatch`.conf" # load the site config logfile="" if [ -f ${SITECONF} ]; then . "${SITECONF}" else echo "Error: no such file: ${SITECONF}" continue fi if [ "X$logfile" = "X" ]; then echo "Error: ${SITECONF} has no logfile config" continue fi TARGET_LOG=$logfile echo -n "Starting Swatch for FuelPHP: ${TARGET_LOG}" ${SWATCH} \ --config-file ${CONFIGFILE} \ --tail-file ${TARGET_LOG} \ --script-dir=${WORKPATH} \ --daemon \ --tail-args='--follow=name --retry -n 0' \ --pid-file ${PROCFILE_PATH}/swatch-fuelphp.${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-fuelphp.*.pid do if [ -f ${PID} ]; then PID_NUMBER=`cat ${PID}` echo -n "Shutting down Swatch for FuelPHP (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 for FuelPHP (pid :" for PID in ${PROCFILE_PATH}/swatch-fuelphp.*.pid do if [ -f ${PID} ]; then echo -n " `cat ${PID}`" fi done echo ") is running." else echo "Swatch for FuelPHP is stopped." fi return 0 } case "$1" in start) start RETVAL=$? ;; stop) stop RETVAL=$? ;; restart) stop start RETVAL=$? ;; status) status RETVAL=$? ;; *) echo "Usage: swatch-fuelphp {start|stop|restart|status}" exit 1 esac exit ${RETVAL}
$ sudo chmod +x /etc/rc.d/init.d/swatch-fuelphp $ sudo chkconfig swatch-fuelphp on
監視設定
準備ができましたので、FuelPHP のサイトの監視設定を作成します。
設定ファイルは /etc/swatch/fuelphp フォルダに配置します。
サイト設定ファイルの作成
「サイト名.conf」としてサイトの設定ファイルを作成します。この設定ファイルでは、FuelPHP のログファイルを定義します。
ここでは、「サイト名」を「fuelphp-site」としています。
$ sudo vi /etc/swatch/fuelphp/fuelphp-site.conf
#!/bin/sh logfile="/var/www/vhost/www.example.com/fuelphp-site/fuel/app/logs/`date +"%Y/%m/%d"`.php" #echo $logfile
サイト用の swatch 設定ファイル
そのサイトの swatch の設定ファイルを作成します。ファイル名は「サイト名.swatch」とします。
$ sudo vi /etc/swatch/fuelphp/fuelphp1st-site.swatch
watchfor /Error/ mail=root@example.com,subject=[fuelphp-site] FuelPHP Error log threshold track_by=Error,type=limit,count=1,seconds=60
ここでは、ログに「Error」という文字列が現れた場合、root@example.com 宛に「[fuelphp-site] FuelPHP Error log」という件名のメールを送信するように定義しています。
また、threshold を指定して、Error が何度発生しても 60秒間には最初の 1回しかメールを送信しないよう指定しています。
これで準備完了です。
監視を開始します。
$ sudo service swatch-fuelphp start