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のエラーログとアクセスログが「ログを受け取るサーバ」と「ログを送信するサーバ」の双方に保存されるようになりました。