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

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

UNIX系OSのシステムロギングをおよそ20年の長きにわたって支えてきた「syslogd」にも、限界が見えつつあります。その限界を打ち破る機能を備えた新しいシスログデーモンを紹介します。(編集部)

[Shin.鶴長,@IT]

 前回「rsyslogの導入」で解説したrsyslogの導入方法に続き、活用方法を紹介します。

 rsyslogでは設定ファイルにマクロテンプレートを適用することができます。ログの内容を自由に組み立てたり、ファイル名に日時やホスト名を付加することが可能です。また拡張モジュールを追加することで、ログをメールで送信したりデータベースに格納することができます。今回はそうしたrsyslogの活用方法を解説します。

注意:以降はrootユーザーにて作業を行います。Ubuntuのようにrootユーザーが直接使用できない場合には、sudoコマンドを使用します。rsyslogのインストール方法や基本的な設定方法は、第4回「rsyslogの導入」を参考にしてください。


rsyslogをバージョン3互換モードで動作させる

 前回の「rsyslogの導入」では、rsyslogのインストール方法を解説しました。前半の「ソースからのインストール」で使用した設定ファイルは、rsyslogの旧バージョンのものを利用しています。そのため起動時に次のようなログが/var/log/messagesに出力されます。

...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 -c3 as the first rsyslogd option.
...rsyslogd: Warning: backward compatibility layer added to following directive to rsyslog.conf: ModLoad imuxsock
リスト1 旧バージョンの設定ファイルを使用しrsyslogを起動した際のログ

 メッセージに従い、バージョン3互換モードで起動するには、rsyslogdの起動オプションに「-c3」を指定します。前回の解説に従ってインストールしている場合、オプションを付加するには、「/etc/sysconfig/rsyslog」に次の1行を追加します。

SYSLOGD_OPTIONS="-c3"
リスト2 rsyslogをバージョン3互換モードで起動させるための/etc/sysconfig/rsyslogの記述例

 また、rsyslogをバージョン3互換モードで動作させた場合、UNIXソケット(注1)からログを受け取れるように、rsyslog.confに次のような行が必要になります。ほかにも、カーネルログを受け取るための追加設定も必要です。詳細は、後に「拡張モジュールの利用」で解説します。

$ModLoad imuxsock
リスト3 UNIXソケットからログを受け取るための/etc/rsyslog.confの記述例

注1:ソケットファイルはUNIX系OSのプロセス間通信で使用されるファイルです。ソケットファイルを使用することで、サーバ/クライアント間のプロセス間通信を、ファイルを通じて行うことができます。UNIXドメインソケットファイルと呼ばれる場合もあります。


 なお、前回の後半で解説したUbuntuの場合、すでにバージョン3互換モードでrsyslogを起動しており、「$ModLoad imuxsock」のような設定も行われているため、ここで説明した修正は不要です。

テンプレートとマクロの活用

 rsyslogは、日付/ホスト名/ログメッセージ/ファシリティ/プライオリティといった項目に対しマクロが定義されており、設定ファイルの中でマクロを使って、ログの内容を組み立てることができます。またログの内容以外に、出力先ディレクトリ名やファイル名にもマクロを使うことができ、日付ごとにファイルを管理するといったことも可能です。

テンプレートとマクロでログをカスタマイズする

 ログをカスタマイズするにはテンプレートを使用します。

 テンプレートを定義する際には、マクロを使ってさまざまな情報を盛り込みます。テンプレートは「/etc/rsyslog.conf」で「$template」を使って定義します。

 次の例では、「ログが作成された日付,ログメッセージ」といった内容でテンプレート「mytemplate」を定義しています。なお、ログを1行ずつファイルに書き出すには、末尾に「\n(改行)」を付けるようにします。リスト4ではファシリティ「local7」のログを「/var/log/custom.log」に出力する際に、mytemplateを適用しています。

$template mytemplate,"%timegenerated%,%msg%\n"
local7.*var/log/custom.log;mytemplate
リスト4 テンプレートとマクロを使用したrsyslog.confの記述例1

 テンプレートの定義には、マクロ以外に、定型メッセージを埋め込むこともできます。

$template mytemplate,"日時:%timegenerated% 内容:%msg%\n"
mail.*/var/log/custom.log;mytemplate
リスト5 テンプレートとマクロを使用したrsyslog.confの記述例2

 利用可能な主なマクロには、表1のようなものがあります。「%マクロ名%」のように、前後に「%」を付けて使用します。

 バージョン3.17.0より新しいrsyslogでは「%MSG%」のような大文字でも、「%msg%」のような小文字でも同じように利用できます。なお、表1に挙げたもの以外に使用可能なマクロは、ソースアーカイブに付属するドキュメント「property_replacer.html」やrsyslog配布元の「The Property Replacer」を参考にしてください。

ファシリティ 用途
msg ログメッセージ
hostname ログを出力したホストの名前
fromhost ログを受け取ったホストの名前
programname プログラム名
syslogfacility ファシリティ(数字)
syslogfacility-text ファシリティ(テキスト)
syslogseverity プライオリティ(数字)
syslogseverity-text プライオリティ(テキスト)
syslogpriority syslogseverityと同等
syslogpriority-text syslogseverity-textと同等
timegenerated ログを受け取った日時
timereported ログが出力された日時
timestamp timereportedと同等
$now 現在時刻(書式:YYYY-MM-DD)
$year 現在の年(4けた)
$month 現在の月(2けた)
$day 現在の日(2けた)
$hour 現在の時(24時間表記、2けた)
$minute 現在の分(2けた)
表1 rsyslog.confで使用可能な主なマクロ

 テンプレートの中には、rsyslogで事前に定義されているものがあります。定義済みのテンプレートは「RSYSLOG_FileFormat」や「RSYSLOG_DebugFormat」のように、接頭文字に「RSYSLOG_」が使用されています。そこで、独自に定義する際には、予約語の「RSYSLOG_」を使用しないように注意してください。使用可能な定義済みテンプレートの詳細は、付属ドキュメント「rsyslog_conf.html」やrsyslog配布元の「Templates」を参照してください。


       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

RSSについて

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

メールマガジン登録

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