varnishncsaでApache形式のアクセスログをsyslogで飛ばしてみる
アクセス解析とかで、プロキシのログも飛ばしといてねってありますよね??
各種ログ集めて、アクセス解析とかちょっと。。。って感じだったので、とりあえず、syslog(rsyslog)で飛ばして、
一元管理できるようにしてみました。後ほど考えられる問題は、後にしといて、以下の感じで、出力してます。
使用のvarnish は「varnishd (varnish-3.0.2 revision 55e70a4)」です。
/usr/bin/varnishncsa -a -P /var/run/varnishncsa.pid -F '%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i' | /usr/bin/logger -p local1.info -t tag &
本来は、 -D オプションつけたいんですが、-Dオプション付けると、loggerでsyslogに出力されないので、あとは、&でバックグラウンド実行するという。。。いけていない。。。
なんかdaemontools使うと負けだと思ってしまいましたwww
initスクリプトは以下( /etc/init.d/varnishncsa )
#! /bin/sh # # varnishncsa Control the Varnish NCSA logging daemon # # chkconfig: - 90 10 # description: Varnish Cache logging daemon # processname: varnishncsa # config: # pidfile: /var/run/varnishncsa.pid ### BEGIN INIT INFO # Provides: varnishncsa # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Default-Start: # Default-Stop: # Short-Description: start and stop varnishncsa # Description: Varnish Cache NCSA logging daemon ### END INIT INFO # Source function library. . /etc/init.d/functions retval=0 pidfile="/var/run/varnishncsa.pid" lockfile="/var/lock/subsys/varnishncsa" logfile="/var/log/varnish/varnishncsa.log" exec="/usr/bin/varnishncsa" prog="varnishncsa" # -D option is no out syslog ... orz #DAEMON_OPTS="-a -w $logfile -D -P $pidfile" DAEMON_OPTS="-a -P $pidfile -F '%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' | /usr/bin/logger -p local1.info -t tag" # Include varnishncsa defaults [ -e /etc/sysconfig/varnishncsa ] && . /etc/sysconfig/varnishncsa start() { if [ ! -x $exec ] then echo $exec not found exit 5 fi echo -n "Starting varnish ncsa logging daemon: " # -D option remove ... so & add( background job ) daemon --pidfile $pidfile $exec "$DAEMON_OPTS" & echo return $retval } stop() { echo -n "Stopping varnish ncsa logging daemon: " killproc -p $pidfile $prog retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop start } reload() { restart } force_reload() { restart } rh_status() { status -p $pidfile $prog } rh_status_q() { rh_status >/dev/null 2>&1 } # See how we were called. case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 restart ;; *) echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 esac exit $?
なんかこうしたらいいよ!!っていうのあったらアドバイス下さいというか、多段のプロキシのアクセスログとか皆さんどーしてるんでしょうか??