Studio3104::BLOG.new

uninitialized constant Studio3104 (NameError)

CentOSでsyslogをやめてrsyslogを始めました

apacheのLOGを、日次で圧縮してscpして・・・ってのがナンセンスに思えてならない

そこで高可用性なSyslogdであり、BSD syslogdと設定ファイル等の互換がある「rsyslog」を導入した

※実際にapacheのLOGをリモートに吐き出すやり方は後日記事にします

この目的ならfluentdを使うほうがベターです。

rsyslog(というよりsyslog)は、高速なLOGを取りこぼすし、意外とダメダメでした。

この記事を最初に書いたときには既にリリースされてたfluentd・・・

自分の情弱ぶりを呪うばかりです・・・

 

fluentd https://github.com/fluent/fluentd 

 

syslogを停止、OS起動時に自動起動しないようにする

さらにsyslog関連のlogrotateの設定を削除

# /etc/init.d/syslog stop
カーネルロガーを停止中:                                    [  OK  ]
システムロガーを停止中:                                    [  OK  ]
# chkconfig syslog off
# chkconfig --list syslog
syslog            0:off    1:off	2:on	3:on	4:on	5:on	6:off
# rm -f /etc/logrotate.d/syslog

 

rsyslogインストール

CentOSリポジトリにあるrsyslogは3系

古いので、公式サイトから5系のstableバージョンのソースアーカイブをダウンロードしてインストールします

http://www.rsyslog.com/download/

# wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-5.8.6.tar.gz
# tar zxvf rsyslog-5.8.6.tar.gz
# cd rsyslog-5.8.6

 

configureします

成功すると、コンパイル時に追加の機能一覧が表示される

"configure --help"でオプションを確認できるので適宜追加

# ./configure
(省略)
****************************************************
rsyslog will be compiled with the following settings:
 
    Large file support enabled:               yes
    Networking support enabled:               yes
    Regular expressions support enabled:      yes
    Zlib compression support enabled:         yes
    rsyslog runtime will be built:            yes
    rsyslogd will be built:                   yes
    GUI components will be built:             no
    custom module 1 will be built:            no
    Unlimited select() support enabled:       no
 
---{ input plugins }---
    Klog functionality enabled:               yes (linux)
(省略)

 

インストール

make checkで"All 3 tests passed"と表示されればmake成功

# make
# make check
(省略)
DevNull.cfgtest succeeded
NoExistFile.cfgtest succeeded
PASS: cfg.sh
==================
All 3 tests passed
(省略)
# make install

 

設定ファイルのサンプルをダウンロード

適切な場所に設置

rsyslog.confはソースアーカイブから持ってきます

# cd ..
# wget http://image.gihyo.co.jp/assets/files/book/2011/978-4-7741-4622-5/rsyslog-sample.zip
# unzip rsyslog-sample.zip

# cp ./rsyslog-5.8.6/rsyslog.conf /etc/
# cp ./rsyslog.log /etc/logrotate.d/rsyslog
# cp ./rsyslog.sysconfig /etc/sysconfig/rsyslog
# cp ./rsyslog.init /etc/init.d/rsyslog
# chmod +x /etc/init.d/rsyslog

 

rsyslogは、独自のログフォーマットで、RFC3164、5424に準拠していません

お馴染みのRFC3164形式で出力するように変更

# vim /etc/rsyslog.conf
【最上段に追記】
# Use traditional timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

 

rsyslog再起動時のmessagesの違い

【BEFORE】

2011-11-30T17:07:10.489696+09:00 HOST01 kernel: Kernel logging (proc) stopped.
2011-11-30T17:07:10.489708+09:00 HOST01 rsyslogd: [origin software="rsyslogd" swVersion="5.8.6" x-pid="11589" x-info="http://www.rsyslog.com" exiting on signal 15.
2011-11-30T17:07:10.595799+09:00 HOST01 kernel: imklog 5.8.6, log source = /proc/kmsg started.
2011-11-30T17:07:10.595860+09:00 HOST01 rsyslogd: [origin software="rsyslogd" swVersion="5.8.6" x-pid="11608" x-info="http://www.rsyslog.com" start

【AFTER】

Nov 30 17:32:50 HOST01 kernel: Kernel logging (proc) stopped.
Nov 30 17:32:50 HOST01 rsyslogd: [origin software="rsyslogd" swVersion="5.8.6" x-pid="11720" x-info="http://www.rsyslog.com" exiting on signal 15.
Nov 30 17:32:50 HOST01 kernel: imklog 5.8.6, log source = /proc/kmsg started.
Nov 30 17:32:50 HOST01 rsyslogd: [origin software="rsyslogd" swVersion="5.8.6" x-pid="11951" x-info="http://www.rsyslog.com" start

 

起動時に下記エラーがでるので/etc/sysconfig/rsyslogも修正します

2011-11-30T17:00:26.752552+09:00 HOST01 rsyslogd: WARNING: rsyslogd is running in compatibility mode. Automatically generated config directives may interfer with your rsyslog.conf settings. We suggest upgrading your config and adding -c5 as the first rsyslogd option.
2011-11-30T17:00:26.753499+09:00 HOST01 rsyslogd: Warning: backward compatibility layer added to following directive to rsyslog.conf: ModLoad imuxsock
# vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-m 0"
↓
SYSLOGD_OPTIONS="-c5"

 

rsyslog起動、自動起動設定

# /etc/init.d/rsyslog start
Starting system logger (rsyslog):                          [  OK  ]
# /etc/init.d/rsyslog status
rsyslogd (pid  10557) を実行中...
# chkconfig rsyslog on
# chkconfig --list rsyslog
rsyslog            0:off	1:off	2:on	3:on	4:on	5:on	6:off

 

確認

# logger hogehoge
# tail -1 /var/log/messages
Nov 30 17:37:48 HOST01 USER: hogehoge

 

ちなみに、

Fedoraは8、Ubuntuは9.10から標準でrsyslogを採用している

CesntOS、RHELはyumで入れられるがバージョンが古い(3系)

OpenSUSEは標準で5系を採用