2008年8月21日木曜日

syslog を rsyslog に入れ替える - CentOS5

ちょっと前にCentOS5.2 がリリースされたのですが、新しく追加されたパッケージの情報に rsyslog (rsyslogd) があった。
CentOS5.2 以降(Redhatがそうなったということなのですが) では これまでの syslog (syslogd) がスタメンを外されて rsyslog が標準の ログ収集デーモンとして採用ということらしい。
 

なので手元のCentOS5 で動いていた syslog を rsyslog に入れ替えてみることにした。
 
多少細かい設定は こちら→ rsyslog.confの設定項目 参考になります。
 
 

"yum install rsyslog" とすると "rsyslog-2.0.0-11.e" が引っかかった、ついでにカーネルロガーも必要バージョンにアップデートされる模様。
rsyslog公式 を見ると、 rsyslogd は現在バージョン2とバージョン3 の2系統がある模様、yumでは v2 が入るけど、どう違うのか。
 
ざっとドキュメント見たところ v2 はほぼ従来の syslog 互換で v3 は機能のモジュール化をしている?
v3 で置き換える場合はコンフィグに従来のsyslogでやっていた機能を提供するモジュールを組み込むよう記述すべしとのこと。
 

ドキュメントからちょっと引用、まあ大体こんな感じ
Rsyslogd understands stock syslogd syntax, so you can simply copy over /etc/syslog.conf to /etc/rsyslog.conf. Note since version 3 rsyslog requires to load plug-in modules to perform useful work
引用元:公式のインストールガイド

 
 
 

さてrsyslogdをインストールしたらコンフィグを確認してみる、"/etc/rsyslog.conf" と "/etc/sysconfig/rsyslog" だ。
ついでに従来のsysylog.conf や syslconfigのsysylog と比較の為両方書き出してみる。
 

"/etc/syslog.conf" の中身、今回のサーバでは全くいじってないのでデフォルト。
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
 
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
 
# The authpriv file has restricted access.
authpriv.* /var/log/secure
 
# Log all the mail messages in one place.
mail.* -/var/log/maillog
 
 
# Log cron stuff
cron.* /var/log/cron
 
# Everybody gets emergency messages
*.emerg *
 
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
 
# Save boot messages also to boot.log
local7.* /var/log/boot.log

 

"/etc/rsyslog.conf" の中身(yum でインストールしてデフォルト)
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
 
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
 
# The authpriv file has restricted access.
authpriv.* /var/log/secure
 
# Log all the mail messages in one place.
mail.* -/var/log/maillog
 
 
# Log cron stuff
cron.* /var/log/cron
 
# Everybody gets emergency messages
*.emerg *
 
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
 
# Save boot messages also to boot.log
local7.* /var/log/boot.log

両者特に空白の長さ以外には違いがない、問題もなさそう。
 
 

"/etc/sysconfg/syslog" の中身、これもデフォルト
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".

 

"/etc/sysconfg/rsyslog" の中身、yum でインストールしたまま
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -rPortNumber Enables logging from remote machines. The listener will listen to the specified port.
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"

こちらはUMASKの記述がなくなってる、デフォルトで077になっているんだろうか。あとちょっと注釈が丁寧。
UMASKはローテーションが起こったときに分かると思うので後で確認の予定。
 
 

まあ取り立てて大きく違いなしと確認したので、そのままsyslogdを停止してrsyslogd を起動する。
メールなどのログが従来どおりの場所に記録されているのを確認、ちゃんと動作しています。
 
 

自動起動を入れ替えて、 syslogd と rsyslogd の差し替え完了。
chkconfig syslog off
chkconfig rsyslog on

 
 

あとはローテーションかなと "/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
}

きっちり先回りで設定済みだった。むむ。。
 
 

念のため"rpm -ql rsyslog" でrpmパッケージを確認すると、ちゃんと "/etc/logrotate.d/syslog" がいてる。
 

結局のところ、ただ差し替えるだけならなんの苦労も無いようですね。