2011/09/16 CentOS5.5





rsyslogをインストールする

rsyslogはデフォルトのBSD Syslogに比べてたくさんの機能が追加されています。
加えて、syslog.confと互換性もあります。
同じくsyslogを改善したsyslog-ngはconfが独特です。
不特定多数の人のためにも、伝統的なsyslogに近いrsyslogを使う方が混乱は少ないでしょう。

実際の運用については「rsyslogを設定する」を参照してください。

rsyslogでできること
インストール情報
ダウンロード
インストール
システムから旧syslogを排除する
自動起動スクリプトを配置する
sysconfigパラメータファイル
rsyslog.confの作成
ログローテートファイル
試験

rsyslogでできること
・集約したsyslogを再転送できる

 リモートから集約したsyslogをさらに別のsyslogサーバへ転送できます。集約と保存、集約と解析を別々のサーバで実施する場合はこの機能は必須です。

・syslogメッセージの内容に対して、アクションを起す

 全ての機器のsyslogをrsyslogで集約し、特定キーワードを見つけたら警告メールを送信できます。
 メールだけでなくSNMPトラップを送信する、システムを再起動する、コマンドを実行するなども行えます。
 同じようにSyslogでメール送信なら「Syslog + swatch」というものもありますが、あまりスマートとは言えません。

・受け取ったsyslogを機器別に自動保存することができる

 ログの送信元別に自動でフォルダ、ファイル名を分けて保存できます。
 多数の機器から集約したsyslogを一つのファイルに延々書き込むのは閲覧の点からも現実的ではありません。
 rsyslogでならホスト名、日付別にファイル・ディレクトリを自動で振り分け保存できます。
 従来のsyslogで同じことをするなら、機器が追加変更されるたびconfファイルをメンテナンスする必要があります。

他にも、rsyslog同士でならTCPを使用すればログの取りこぼしがないとか、キューを使用して負荷を下げるとか、相手のrsyslogサーバがダウンしていても再送することでログの喪失がないとか、ログの送信先にセカンダリが指定できるとか、ログをMySQLなどへ大量格納できるとかあります。
ログ収集が重要な大規模なシステムだと、こういう機能がエンジニアを助けてくれます。

インストール情報
CentOS5.5で標準採用されているrsyslogのバージョンは3.22です。
つまりyumでインストールすれば、自然と3.22がインストールされますl
これも一応現行バージョンですが、すでに6も開発されてます。出来れば最新の安定板である5を使用したいところ。
(2011年現在、Ver3もまだ開発が続けられています)

バイナリ(RPM)版とソース版の違い

バイナリ版
・CentOS5.5で標準で収録されているバージョンは3.22
・コンパイルによる機能変更ができない(syslogのメール送信、SNMP送信機能などが使用できない)
・「yum install rsyslog」でインストールは終了する
・インストールすると、サービスの登録や自動起動スクリプトなども配置してくれる
・インストールパスは/sbin/rsyslogd

ソース版
・最新版のソースコードをダウンロード、コンパイルして使用する
・インストール後、自動起動スクリプトやrsyslog.conf手動で配置してやる
・コンパイル時にオプションを加えることで、syslogのメール送信などが使用できる
・Ver5はVer3に比べてパフォーマンスが改善されている。
・デフォルトのインストールパスは/usr/local/sbin/rsyslogd

バイナリ版なら「yum install rsyslog」でインストールが完了です。
難しいことを考えない、長く使わないのならこちらでいいでしょう。
でもそれならsyslogを使用すれば済むことです。
rsyslogをわざわざ使う理由があるのなら、新しいバージョンを使用したほうが幸せになれます。
しかしCentOSで使うのはちょっとメンドウです。

ダウンロード
本家サイトよりソースをダウンロードします。

4系、5系、6系がそれぞれ時系列順にランダムに更新されている独特なページです。
devel=開発版、beta=ベータ版、stable=安定板の意味です。
現時点ではまだ6のstabeは出ていないので、5のstableをダウンロードします。

GUIでブラウザからダウンロードするか、URLを調べておいて、wgetからURLを入力します。
#wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-5.8.5.tar.gz

インストール
ダウンロードしたら適当なところで解凍、インストールします。
(rsyslogは後で「あのモジュールが追加したい」「あの機能を使いたい」という場合は、ソースコードの再コンパイルが必要になりますので、ソースコードは残しておいたほうが後々便利です。貴方が長い運用を求めているのなら、ソースコードを/usr/local/srcの下に展開するでしょう)

#tar zxvf rsyslog-5.8.5.tar.gz
#cd rsyslog-5.8.5.tar.gz
#./configure --enable-mail   #メール送信機能を使用するので「--enable-mail」オプションを使用します
#make
#make install

正常にインストールが完了すると、図のような「必要ならドキュメント見ろよ」的なメッセージが表示されます。


なぜか一度目のインストール中に「maike コマンドがない」的なメッセージが出てエラーが出ました。
なんだ? maikeコマンドって。makeの綴り間違いだろうか。
そんなエラーが出たときは、もう一度インストールを実行したら完了しました。

システムから旧syslogを排除する
rsyslogとsyslogは競合します。デフォルトのsyslogを止めておきましょう。

#services syslog stop
#chkconfig syslog off

自動起動スクリプトを配置する
サービス起動にはスクリプトが必要です。
自動起動スクリプト、sysconfigパラメータファイル、rsyslog.conf、ログローテートの4スクリプトです。

さてここでrsyslog最大の問題が発生します。
各種スクリプトがインストール時に用意されていません。
これ、問題ですよね。改善してほしいです。

自動起動スクリプト。これが一番厄介です。手作業で記述するには非現実的です。
そこで現行のsyslogdファイルを複製して編集するのが一番てっとり早いです。

#cd /etc/init.d/
#cp syslog rsyslog
#vi rsyslog

viを使用して、本文中のsyslogキーワードを全てrsyslogに置換します。
入力するコマンドは「:(コロン)%s/syslog/rsyslog/g」です。


そして実行プログラムのインストールパスがsyslogとrsyslogでは異なっているため、そこのパスを変更します。
2か所です。

変更前1

変更後1


変更前2

変更後2



sysconfgパラメータファイル
同じく、rsyslog用のsysconfigファイルを作成します。
これもコピーしましょう。

#cd /etc/sysconfig
#cp syslog rsyslog

このままでも動作しますが、起動の度に「これはVer3互換モードです。ネイティブモードで動作するには…」
とバージョン違いを訴えられます。
以下のように「-m 0」を「-c5」に書き換え、Ver5のネイティブモードで動作させます。

変更前

変更後


rsyslog.confの作成
デフォルトのrsyslog.confはrsyslogのソースコードディレクトリにひな型ファイルがおいてあります。
これを使用します。

#cp (ソースディレクトリ)/rsyslog.conf /etc

デフォルトのrsyslog.confを使用する場合、冒頭にある$immarkをコメントアウトします。
このモジュールは20分おきに「rsyslogd:-- MARK --」というログを出力します。運用しているとうざったいです。



もしすでに貴方のsyslog.confが複雑に設定済みなら、そのsyslogファイルを使用するほうが利に適ってます。
ちなみに本家サイトにも「デフォルトのsyslog.confを使用するのもナイス」とあります。
syslog.confとrsyslog.confには互換性があるので、以下のモジュールロードの分だけ冒頭に追加すればrsyslogで動作するようになります。
$ModLoad imuxsock
$ModLoad imklog


rsyslogのデフォルトではUDPはおろか、ローカルシステムのログ(imuxsock)すら受け付けてません。(どういう思想なんでしょうね)
さらに、システムが他からSyslog受信を受け付けていた場合は、UDPを受け付ける設定をしてやる必要があります。
ひな型を使用しているなら、コメントアウトを外します。
syslog.confを書き換えているのなら、以下の行を追加します。

$ModLoad imudp  #リモートSyslogを受け付けている場合

$UDPServerRun 514  #UDPで受け付けている場合

ログローテートファイル
通常syslogファイルは、毎朝4:02にローテートされ、世代が変わります。
この時syslogサービスが再起動されます。
これからは、rsyslogを再起動するように変更します。

#cd /etc/logroted.d/
#mv syslog rsyslog
#vi rsyslog

syslogd.pidrsyslogd.pidへ変更します。



試験
この時点でrsyslogが正常に起動するはずです。
サービスを起動させてみます。

#services rsyslog start
#chkconfig rsyslog on



正常起動のメッセージを確認します。
失敗しているのなら、ファイルの記述を見直します。

出力試験をします。loggerコマンドを使用します。

#logger "Test Syslog"
#tail /var/log/message

messageファイルに「Test Syslog」が出力されていれば成功です。

実際のrsyslogの使用法については「rsyslogを設定する」を参照してください。






prev.gif