CentOS4 の syslog を rsyslog に入れ替える
目次 |
RPM パッケージを利用する方法では、Repoforge (RPMforge) でバージョン2系が配布されているので、それを利用する。
ソースコードをビルドする方法では、最新バージョン(バージョン 3, 4, 5)でもインストールが可能。
バージョンが上がることで、どの様な機能が追加されたかは Features rsyslog で確認できる。
RPM パッケージを利用する方法
Repoforge (RPMforge) で配布されているのでダウンロードする。
インストールしようとすると /etc/logrotate.d/syslog がコンフリクトすると警告がでる。
[shell]# rpm -ihv rsyslog-2.0.6-0.1.el4.rf.x86_64.rpm 警告: rsyslog-2.0.6-0.1.el4.rf.x86_64.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6 Preparing... ########################################### [100%] file /etc/logrotate.d/syslog from install of rsyslog-2.0.6-0.1.el4.rf conflicts with file from package sysklogd-1.4.1-28.el4
コンフリクトの警告を回避するため、--force で強制インストールする。
rpm -ihv --force rsyslog-2.0.6-0.1.el4.rf.x86_64.rpm
インストール済みの syslog(sysklogd パッケージ)をアンインストールする必要はない。 |
rsyslog の設定ファイル rsyslog.conf は、syslog.conf の初期内容と同じになっている。
rsyslog.conf は syslogd.conf と互換性があるため、syslog.conf の設定を rsyslogd.conf にコピーするだけで使える。
syslog デーモンを停止後、rsyslogd デーモンを起動。
/etc/init.d/syslog stop /etc/init.d/rsyslogd start
自動起動も設定しておく。
chkconfig syslog off chkconfig rsyslog on
インストール時にコンフリクトが起きる原因
インストール時にコンフリクトが起きる原因は、sysklogd パッケージと rsyslog パッケージに同名のファイル /etc/logrotate.d/syslog があるため。 内容を比較すると、rsyslog パッケージの方に5行目が追加されているだけ。
sysklogd パッケージの /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
rsyslog パッケージの /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
インストールされる主なファイル
sysklogd パッケージと rsyslog パッケージは logrotate 用のファイルだけが同名なだけで、他のファイルは共存できる。
sysklogd パッケージ | rsyslog パッケージ |
---|---|
/etc/logrotate.d/syslog /etc/rc.d/init.d/syslog /etc/sysconfig/syslog /etc/syslog.conf /sbin/klogd /sbin/syslogd /usr/share/doc/sysklogd-1.4.1 ... |
/etc/logrotate.d/syslog /etc/rc.d/init.d/rsyslog /etc/rsyslog.conf /etc/sysconfig/rsyslog /sbin/rfc3195d /sbin/rklogd /sbin/rsyslogd /usr/lib64/rsyslog /usr/share/doc/rsyslog-2.0.6 ... |
最新版のソースコードをビルドする方法
- 適当なディレクトリに make install する。
- rsyslog.conf はソースコード付属のファイルを使用。
- その他のファイル(起動スクリプトなど)は syslog のファイルをコピー&編集して使う。
- 自動起動の設定を変更する。
手順
- ソースコードをビルドする。
- 設定ファイル rsyslog.conf は、ソースコード付属のファイルをコピー&編集して使う。
- 起動スクリプトはインストールされないので、syslog のファイルをコピー&編集して使う。
- syslog と書かれている部分をすべて rsyslog に置換する。(小文字のみ)
- 20, 37 行目の rsyslogd のパスをインストールしたパスに変更する。
- klogd は使用しないので、21, 28, 40-42, 47-49, 59, 80-85 行目をコメントアウトする。
- 自動起動の設定を変更する。
最新バージョンの stable 版をダウンロードし、ビルドする。
どこにインストールするかは、好みの問題なので適当に。データベースへアウトプットするモジュールや、アラートメールを送るモジュールが必要ならば、./configure --help で確認。
[shell]# ./configure --prefix=/usr/local/rsyslog [shell]# make [shell]# make install
cp rsyslog.conf /etc/
ソースコード付属の rsyslog.conf は、ログを記録する設定内容が syslog.conf の初期設定と同じになっている。syslog.conf をカスタマイズしている場合は、カスタマイズ部分をそのまま rsyslog.conf にコピーするだけでよい。
[shell]# cp /etc/init.d/{syslog,rsyslog} [shell]# cp /etc/sysconfig/{syslog,rsyslog}
/etc/init.d/rsyslog の編集部分
#!/bin/bash # # rsyslog Starts rsyslogd/klogd. # # # chkconfig: 2345 12 88 # description: Syslog is the facility by which many daemons use to log \ # messages to various system log files. It is a good idea to always \ # run rsyslog. ### BEGIN INIT INFO # Provides: $rsyslog ### END INIT INFO # Source function library. . /etc/init.d/functions RETVAL=0 start() { [ -x /usr/local/rsyslog/sbin/rsyslogd ] || exit 5 # [ -x /sbin/klogd ] || exit 5 # Source config if [ -f /etc/sysconfig/rsyslog ] ; then . /etc/sysconfig/rsyslog else SYSLOGD_OPTIONS="-m 0" # KLOGD_OPTIONS="-2" fi if [ -z "$SYSLOG_UMASK" ] ; then SYSLOG_UMASK=077; fi umask $SYSLOG_UMASK echo -n $"Starting system logger: " daemon /usr/local/rsyslog/sbin/rsyslogd $SYSLOGD_OPTIONS RETVAL=$? echo # echo -n $"Starting kernel logger: " # daemon klogd $KLOGD_OPTIONS # echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog return $RETVAL } stop() { # echo -n $"Shutting down kernel logger: " # killproc klogd # echo echo -n $"Shutting down system logger: " killproc rsyslogd RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog return $RETVAL } rhstatus() { status rsyslogd # status klogd } restart() { stop start } reload() { RETVAL=1 rsyslog=`cat /var/run/rsyslogd.pid 2>/dev/null` echo -n "Reloading rsyslogd..." if [ -n "${rsyslog}" ] && [ -e /proc/"${rsyslog}" ]; then kill -HUP "$rsyslog"; RETVAL=$? fi if [ $RETVAL -ne 0 ]; then failure else success fi echo RETVAL=1 # echo -n "Reloading klogd..." # klog=`cat /var/run/klogd.pid 2>/dev/null` # if [ -n "${klog}" ] && [ -e /proc/"${klog}" ]; then # kill -USR2 "$klog"; # RETVAL=$? # fi if [ $RETVAL -ne 0 ]; then failure else success fi echo return $RETVAL } case "$1" in start) start ;; stop) stop ;; status) rhstatus ;; restart) restart ;; reload) reload ;; condrestart) [ -f /var/lock/subsys/rsyslog ] && restart || : ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart}" exit 2 esac exit $?
/etc/sysconfig/rsyslog の編集部分
SYSLOGD_OPTIONS="-m 0" となっている部分を、インストールした rsyslog のバージョンに合わせ SYSLOGD_OPTIONS="-c5" のように書き換える。
/etc/logrotate.d/syslog の編集部分
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { sharedscripts postrotate # /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
chkconfig syslog off chkconfig rsyslog on
インストールができたら、syslog を停止し rsyslog を起動する。
/etc/init.d/syslog stop /etc/init.d/rsyslog start