syslogで複数のapacheサーバのログを集積する
CentOS5.5でsyslogとapacheの設定を弄って、ログサーバにログを集めます。
設定
設定は、「ログを受け取るサーバ」と「ログを送信するサーバ」の双方に行います。
syslogはudpを使ってログを送信するので、どうしてもログの取りこぼしが発生します。
今回のゴールは「ログを受け取るサーバ」と「ログを送信するサーバ」の双方にログを残し、送信失敗したログもローカルで確認できるようにします。
ログを受け取るサーバの設定
まずは、ログを受け取るサーバの設定をします。具体的には/etc/sysconfig/syslogのSYSLOGD_OPTIONS変数に、-rを追加し、514/udpを待機状態にします。
% vi /etc/sysconfig/syslog SYSLOGD_OPTIONS="-m 0 -r" % service syslog restart % netstat -an |grep -i udp | grep 514 #ポートが待機中になっているか確認
次にログを受け取るサーバのログの出力先を指定します。/etc/syslog.confではログのタイプ(facility)やログレベルと出力先を紐づける設定を行います。syslog.confの設定を終えたら設定を反映させます。
% vi /etc/syslog.conf #以下を追記 # apache access_log local6.* /var/log/httpd/access_log # apache error log local5.* /var/log/httpd/error_log # syslog.confの変更をsyslogdへ反映させる % kill -HUP `cat /var/run/syslogd.pid`
以上でログを受け取る設定は完了です。
次にログを送信するサーバの設定を行います。
ログを送信するサーバの設定
まずhttpd.confの設定でaccess_logとエラーログをsyslogに出力するように設定します。
% vi /etc/httpd/conf/httpd.conf <VirtualHost *:80> ServerName oratta.com DocumentRoot "/var/httpdocs" ErrorLog syslog:local5 # エラーログの出力設定 CustomLog logs/access_log combined CustomLog "|/usr/bin/logger -p local6.info --" combined # アクセスログの出力設定 AddType application/x-httpd-php .html .php php_flag display_errors on </VirtualHost> # サーバ再起動 % service httpd restart
次にsyslog.confを設定し、ログを先ほど設定した受取先サーバに転送する設定をします。
この時に、apacheエラーログのローカル出力先も指定します。CustomLogはローカルとリモートと双方指定できますが、ErrorLogは2つの出力先を選べないので、双方syslogに出力するようにします。
% vi /etc/syslog.conf # apache error log local5.* /var/log/httpd/error_log # to log server *.* @192.168.1.5 #転送先サーバのIP # syslog.confの変更をsyslogdへ反映させる % kill -HUP `cat /var/run/syslogd.pid`
以上で設定完了。apacheのエラーログとアクセスログが「ログを受け取るサーバ」と「ログを送信するサーバ」の双方に保存されるようになりました。