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
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" がいてる。
結局のところ、ただ差し替えるだけならなんの苦労も無いようですね。