連載
» 2008年12月05日 00時00分 公開

新世代syslogデーモン徹底活用(5):マクロとテンプレートによるrsyslog活用法 (2/2)

[Shin.鶴長,@IT]
前のページへ 1|2       

テンプレートでログファイルを日付ごとに管理

 rsyslogでは、ログのファイル名や保存先ディレクトリの指定に、日付やホスト名といったマクロを用いることができます。そうすることで、別途「logrotate」のようなツールを組み合わせなくても、ログファイルを日付ごとに整理できます。

 次の例では「/var/log/messages_20081110」のようなログファイルが日次で生成されます。さらに、テンプレートに従って動的にファイルを生成するには、ログ出力先の指定で「?テンプレート名」のように「?」を付加します。

$template DynamicFileName1,"/var/log/messages_%$year%%$month%%$day%"
*.* ?DynamicFileName1(※注2)
リスト6 ログファイルの名前に日付を付加するためのrsyslog.confの記述例

注2:本稿ではrsyslog.confの設定で、ログをより分けるために頻繁に「*.*」を指定しています。「*.*」は全ファシリティの全プライオリティのログが対象になります。特定のファシリティ、例えばauthprivファシリティに関するログだけを対象にするには、「authpriv.*」のような指定を用います。詳細は第1回を参考にしてください。


 次の設定では、ディレクトリ名を指定するのに日付マクロを使用しています。年月日ごとにディレクトリを作成し、その中にログファイルを作成する仕組みです。

$template DynamicFileName2,"/var/log/syslog/%$year%/%$month%/%day%/message.log"
*.* ?DynamicFileName2
リスト7 日付ごとに整理されたディレクトリにログファイルを保存するためのrsyslog.confの記述例

 ログを集中して管理するサーバでは、さまざまなネットワーク機器やリモートホストからのログを受け取ることになります。そのようなサーバでは、次のように「%hostname%」を使って、機器ごとにログファイルを整理するようにすると便利です。その際「%programname%」を使えば、機器名だけでなく、ログを出力しているプログラム名を付加することができます。使用可能なマクロは、前述の表1のとおりです。

$template DynamicFileName3,"/var/log/syslog/%hostname%/%$year%/%$month%/%day%/%programname%.log"
*.* ?DynamicFileName3  
 
(「/var/log/syslog/ホスト名/年/月/日」でディレクトリを作成し、「プログラム名-日.log」をファイル名に持ったログを生成します)
リスト8 ホストや日付ごとに整理されたディレクトリにログファイルを保存するためのrsyslog.confの記述例

 このようにテンプレートを活用すれば、日付やホスト名に基づいてログファイルを整理できます。しかし、7日前のログファイルを順次削除するような世代管理や、古いファイルの圧縮保存といった処理までは、rsyslog単体ではできません。そうしたアーカイブ管理まで実行するには、logrotateのようなツールを使用する必要があります。

拡張モジュールの利用

 rsyslogはモジュールの追加によっても機能を拡張できます。外部プログラムに頼ることなく、バリエーションに富んだ出力方法や入力方法を備えています。

モジュールの追加方法(カーネルログの取り込み)

 モジュールを追加するには、設定ファイルのrsyslof.confで「$ModLoad」に続けてモジュール名を指定します。例えばカーネルログを取り込むには、次のようにモジュール「imklog」を有効にします。

$ModLoad imklog
リスト9 カーネルログを取り込むためのrsyslog.confの記述例

 ローカルホストから排出されるログは、通常、UNIXソケットを通して受け取ります。rsyslogでUNIXソケットからログを受け取るには、imuxsockモジュールが必要ですが、バージョン2互換モード(注3)でrsyslogを起動している場合、特に設定を加えることなくデフォルトで使用することができます。リモートホストのログをUDPで受け付けるにはimudpモジュールを、TCPで受け付けるにはimtcpモジュールを使用します。

注3:rsyslogをバージョン3互換モードで動作させた場合、imuxsockモジュールは有効になりません。「$ModLoad imuxsock」とrsyslog.confに記述し、imuxsockモジュールを有効にする必要があります。rsyslogのバージョン3互換モードについては、冒頭の「rsyslogをバージョン3互換モードで動作させる」を参照してください。


 このように入力系モジュールには、接頭文字として「im……」が使用されています。なおリモートサーバにログを送信する方法や、リモートクライアントからログを受け取る方法については、次回、解説を加えます。

#UDPを使用する場合
$ModLoad imudp
$UDPServerRun 514 #ポート番号の指定
 
#TCPを利用する場合
$ModLoad imtcp
$InputTCPServerRun 514 #ポート番号の指定
リスト10 リモートホストのログを取り込むためのrsyslog.confの記述例

 出力系モジュールには、メールでログを送信するための「ommail」や、MySQLサーバにログを格納するための「ommysql」のようなモジュールがあり、接頭文字に「om……」が使用されています。

 モジュールのいくつかはデフォルトで使用できますが、ommailやommysqlはrsyslogインストール時にビルドしておく必要があります。モジュールをビルドするには、configure実行時に、次のようなオプションを追加します。

 なおommysqlモジュールをビルドする場合、MySQLのクライアントライブラリやヘッダファイルが必要になります。

 例えばCentOSやFedoraでMySQLのクライアントライブラリやヘッダファイルをインストールするには、yumコマンドを使って、「# yum install mysql mysql-devel」のようにオンラインでインストールを実行します。ちなみにMySQLのインストール方法は、「今から始める MySQL入門」などが参考になります。

# ./configure --enable-mysql --enable-mail
--enable-mysql:ログをメールで送信するためのモジュールをビルドします。
--enable-mail:ログをMySQLサーバに格納するためのモジュールをビルドします
リスト11 rsyslogインストール時に拡張モジュールを有効にする
(configure以外のrsyslogのインストール方法は、第4回を参照)

 ディストリビューションのパッケージを使ってrsyslogをインストールした場合は、インストール時点ですでに多くの拡張モジュールが付属しています。ビルドされた拡張モジュールの保存先は、第4回に記したとおりです。

# ls /usr/local/lib/rsyslog/
imklog.la  imtcp.la  imuxsock.la  lmregexp.la  lmtcpsrv.la  omtesting.la
imklog.so  imtcp.so  imuxsock.so  lmregexp.so  lmtcpsrv.so  omtesting.so
immark.la  imudp.la  lmnet.la     lmtcpclt.la  ommysql.la
immark.so  imudp.so  lmnet.so     lmtcpclt.so  ommysql.so
 
(rsyslogをソースファイルを使ってインストールした場合、デフォルトでは/usr/local/lib/rsyslog/にビルド済みモジュールを見つけることができます)
リスト12 rsyslogのビルド済みモジュール一覧

 モジュールはビルドしただけでは使用できません。rsyslog.confで「$ModLoad」を使って組み込む必要があります。

 最終回となる次回は、こうした機能活用の具体例として、「ommailモジュールを使ってメールでログを送信する方法」と「ommysqlモジュールを使ってMySQLサーバにログを格納する方法」を解説します。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。