syslog-ngでsyslogメッセージを集中管理

仮想サーバがたくさんいるので、syslogメッセージをネットワーク管理サーバで集中管理したい。CentOS5で採用されているsyslogdでも実現できるが、せっかくなので信頼性や柔軟性に優れているといわれるsyslog-ngを使うことにする。

syslog-ngはCentOSのリポジトリにはないので、yum installでインストールできない。以下の2つのファイルをwgetでダウロードした。

ftp://ftp.silfreed.net/repo/rhel/5/x86_64/silfreednet/RPMS/eventlog-0.2.7-1.el5.x86_64.rpm

ftp://ftp.silfreed.net/repo/rhel/5/x86_64/silfreednet/RPMS/syslog-ng-2.0.9-3.el5.x86_64.rpm

まずsyslogサーバ側の設定。rpmコマンドで上記2つのパッケージをインストールする。

[root@manager1 ~]# yum install eventlog-0.2.7-1.el5.x86_64.rpm
[root@manager1 ~]# yum install syslog-ng-2.0.9-3.el5.x86_64.rpm

次に/etc/syslog-ng/syslog-ng.confを編集して、UDPポート514番をつかってsyslogメッセージを受信するように設定する。具体的には#でコメントアウトされている udp(ip(0.0.0.0) port(514)); の#を外すだけ。

[root@manager1 ~]# vi /etc/syslog-ng/syslog-ng.conf
...
source s_sys {
        file ("/proc/kmsg" log_prefix("kernel: "));
        unix-stream ("/dev/log");
        internal();
        udp(ip(0.0.0.0) port(514));
};
...

設定ファイルを編集したら、構文チェックをする。問題がなければなにもメッセージが出ない。

[root@manager1 ~]# syslog-ng -s

次にiptablesの設定を変更する。

[root@manager1 ~]# vi /etc/sysconfig/iptables
...
-A RH-Firewall-1-INPUT -p udp -m udp --dport 514 -j ACCEPT
...
[root@manager1 ~]# service iptables restart

次に現在動いているsyslogdを停止して、syslog-ngを起動する。

[root@manager1 ~]# service syslog stop
[root@manager1 ~]# service syslog-ng start

ここまでうまく行ったら、syslogdの自動起動を停止してsyslog-ngを自動起動するようにする。

[root@manager1 ~]# chkconfig syslog off
[root@manager1 ~]# chkconfig syslog-ng on

ちなみにsyslog-ndでもロックファイルとしてsyslogdと同じ/var/run/syslogd.pidを使うので、logrotateの設定を変える必要はない。

続いてクライアント側の設定。サーバと同様に2つのパッケージをインストールする。

[root@storage1 ~]# yum install eventlog-0.2.7-1.el5.x86_64.rpm
[root@storage1 ~]# yum install syslog-ng-2.0.9-3.el5.x86_64.rpm

/etc/syslog-ng/syslog-ng.confは、以下の3行を追加する。

[root@manager1 ~]# vi /etc/syslog-ng/syslog-ng.conf
...
destination d_manager { udp("192.168.0.26"); };
...
log { source(s_sys); filter(f_auth); destination(d_manager); };
...
log { source(s_sys); filter(f_default); destination(d_manager); };
...

設定ファイルを編集したら、構文チェックをする。

[root@storage1 ~]# syslog-ng -s

次に現在動いているsyslogdを停止して、syslog-ngを起動する。

[root@storage1 ~]# service syslog stop
[root@storage1 ~]# service syslog-ng start

ここまでうまく行ったら、syslogdの自動起動を停止してsyslog-ngを自動起動するようにする。

[root@storage1 ~]# chkconfig syslog off
[root@storage1 ~]# chkconfig syslog-ng on

syslogサーバ側でtail -f /var/log/messagesをやっておくと、クライアント側でsyslog-ngを起動したタイミングでメッセージが上がってくるのが見える。