rsyslogでは、ログのファイル名や保存先ディレクトリの指定に、日付やホスト名といったマクロを用いることができます。そうすることで、別途「logrotate」のようなツールを組み合わせなくても、ログファイルを日付ごとに整理できます。
次の例では「/var/log/messages_20081110」のようなログファイルが日次で生成されます。さらに、テンプレートに従って動的にファイルを生成するには、ログ出力先の指定で「?テンプレート名」のように「?」を付加します。
$template DynamicFileName1,"/var/log/messages_%$year%%$month%%$day%" *.* ?DynamicFileName1(※注2)
注2:本稿ではrsyslog.confの設定で、ログをより分けるために頻繁に「*.*」を指定しています。「*.*」は全ファシリティの全プライオリティのログが対象になります。特定のファシリティ、例えばauthprivファシリティに関するログだけを対象にするには、「authpriv.*」のような指定を用います。詳細は第1回を参考にしてください。
次の設定では、ディレクトリ名を指定するのに日付マクロを使用しています。年月日ごとにディレクトリを作成し、その中にログファイルを作成する仕組みです。
$template DynamicFileName2,"/var/log/syslog/%$year%/%$month%/%day%/message.log" *.* ?DynamicFileName2
ログを集中して管理するサーバでは、さまざまなネットワーク機器やリモートホストからのログを受け取ることになります。そのようなサーバでは、次のように「%hostname%」を使って、機器ごとにログファイルを整理するようにすると便利です。その際「%programname%」を使えば、機器名だけでなく、ログを出力しているプログラム名を付加することができます。使用可能なマクロは、前述の表1のとおりです。
$template DynamicFileName3,"/var/log/syslog/%hostname%/%$year%/%$month%/%day%/%programname%.log" *.* ?DynamicFileName3 (「/var/log/syslog/ホスト名/年/月/日」でディレクトリを作成し、「プログラム名-日.log」をファイル名に持ったログを生成します)
このようにテンプレートを活用すれば、日付やホスト名に基づいてログファイルを整理できます。しかし、7日前のログファイルを順次削除するような世代管理や、古いファイルの圧縮保存といった処理までは、rsyslog単体ではできません。そうしたアーカイブ管理まで実行するには、logrotateのようなツールを使用する必要があります。
rsyslogはモジュールの追加によっても機能を拡張できます。外部プログラムに頼ることなく、バリエーションに富んだ出力方法や入力方法を備えています。
モジュールを追加するには、設定ファイルのrsyslof.confで「$ModLoad」に続けてモジュール名を指定します。例えばカーネルログを取り込むには、次のようにモジュール「imklog」を有効にします。
$ModLoad imklog
ローカルホストから排出されるログは、通常、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 #ポート番号の指定
出力系モジュールには、メールでログを送信するための「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サーバに格納するためのモジュールをビルドします
ディストリビューションのパッケージを使って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/にビルド済みモジュールを見つけることができます)
モジュールはビルドしただけでは使用できません。rsyslog.confで「$ModLoad」を使って組み込む必要があります。
最終回となる次回は、こうした機能活用の具体例として、「ommailモジュールを使ってメールでログを送信する方法」と「ommysqlモジュールを使ってMySQLサーバにログを格納する方法」を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.