CentOS4.4のサーバにsyslog-ngをインストールしました。
標準で入っているsyslogdを完全に置き換えられます。互換性もばっちり。
ボクがインストールしたのはsyslog-ng v1.6です。
本家では、今年の1月に2.0もリリースされていますが、1.6の方が実績もあってかれていそう。
FC6のextrasパッケージの中にsyslog-ng v1.6.12のSRPM(~.src.rpm)があります。
これをダウンロードしてきて、リビルドするだけでRPMが出来上がり。
rpmbuild --rebuild syslog-ng-1.6.12-1.fc6.src.rpm
本来、syslog-ngをコンパイルするには、libolが必要なのですが、CentOSのには入っていません。
しかし、FC6のsyslog-ngのSRPMパッケージにはlibolも入っているので、何も考えずにリビルドするだけでOKです。
RPMパッケージができたら、rpmコマンドでインストール。
rpm -ivh /usr/src/redhat/RPMS/i386/syslog-ng-1.6.12-1.fc6.i386.rpm
この状態では、syslogdとsyslog-ngが一緒に入っています。
既存のsyslogdは消す必要はなく、止めるだけで問題ないです。
/etc/syslog-ng/syslog-ng.conf が /etc/syslog.conf の代わりになります。
syslog.conf をカスタマイズしていなければ、インストールされた syslog-ng.conf そのままで問題ありません。互換性を意識した設定が予め入っています。
カスタマイズしている人はサンプルファイルを元にsyslog-ng.confを修正してください。
サンプルは、/usr/share/doc/syslog-ng-~/に入っています。
次は、confファイルの構文チェックを行います。
syslog-ngには、apacheのようにconfのチェック機能がついています。
-sオプションがチェック機能です。チェックだけを行います。
/sbin/syslog-ng -s
エラーが表示されなければOKです。
いよいよ、既存のsyslogdを止めて、syslog-ngを起動します。
/etc/init.d/syslog stop
/etc/init.d/syslog-ng start
起動後、psコマンドでsyslog-ngが起動していることを確認してください。
tail -f /var/log/messages
でログを確認しつつ、logger コマンドでログを送信してみます。
logger test
ログが表示されればOK。
後は、サーバ再起動後もsyslog-ngが立ち上がるようにchkconfigを実行します。
/sbin/chkconfig syslog off
/sbin/chkconfig syslog-ng of
簡単。
同じ手順でFC1のsyslogもsyslog-ngに置き換えられました。
また、リモートのsyslogの送受信に関しては、syslog to syslog-ng、syslog-ng to syslog-gn どちらも問題なくできました。
特にsyslog to syslog-ng で全然問題なく転送できるので、受信サーバ側だけでもsyslog-ngに置き換えると、それだけでも恩恵を受けられます。
チューニング次第ですが、受信能力を高められます。
たぶんデフォルトでもsyslogdより多く受信できると思います。
use_dns()やlog_fifo_size()やsync()やgc_idle_threshold()やgc_busy_threshold()を調整して能力を上げられます。
もちろんトレードオフになる部分もあるので、よく考えて分かった上で調整してください。
syslog-ng の機能の一つで、DROPしたログの件数を表示してくれるので参考になります。
(ただし、そもそもサーバに届かなかったログはDROPした件数に含まれないのでご注意を。)
また、syslog-ng to syslog-ng なら TCP での送受信もできます。
UDPで取りこぼしていたログもTCPなら取りこぼさなかったり、取りこぼしが少なくなったりします。
なお、syslog-ng.confにtcpの設定を書く時に注意点があります。
ボクははまってなかなか上手く動きませんでした orz
ウェブのリファレンス・マニュアルのTCPのdestinationの設定で、『Example 3.12. Using the tcp() driver』には、
destination d_tcp { tcp("10.1.2.3" port(1999); localport(999)); };
と書いてあるのですが、port(1999)の後ろの;(セミコロン)は要りません。
オプションは空白区切りで列挙してください。この例のままセミコロン付きにすると構文エラーになります:-(
単純ゆえに気づくまで時間がかかるw
参考URL
・syslogをsyslog-ngに置き換えるには (via @IT)
・第9回 安全性の高いログ・サーバへの乗り換えのススメ(1) (via @IT)
~ syslogサーバからsyslog-ngへの乗り換え ~
