UNIX系OSのシステムロギングをおよそ20年の長きにわたって支えてきた「syslogd」にも、限界が見えつつあります。その限界を打ち破る機能を備えた新しいシスログデーモンを紹介します。(編集部)
前回「rsyslogの導入」で解説したrsyslogの導入方法に続き、活用方法を紹介します。
rsyslogでは設定ファイルにマクロやテンプレートを適用することができます。ログの内容を自由に組み立てたり、ファイル名に日時やホスト名を付加することが可能です。また拡張モジュールを追加することで、ログをメールで送信したりデータベースに格納することができます。今回はそうしたrsyslogの活用方法を解説します。
注意:以降はrootユーザーにて作業を行います。Ubuntuのようにrootユーザーが直接使用できない場合には、sudoコマンドを使用します。rsyslogのインストール方法や基本的な設定方法は、第4回「rsyslogの導入」を参考にしてください。
前回の「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
メッセージに従い、バージョン3互換モードで起動するには、rsyslogdの起動オプションに「-c3」を指定します。前回の解説に従ってインストールしている場合、オプションを付加するには、「/etc/sysconfig/rsyslog」に次の1行を追加します。
SYSLOGD_OPTIONS="-c3"
また、rsyslogをバージョン3互換モードで動作させた場合、UNIXソケット(注1)からログを受け取れるように、rsyslog.confに次のような行が必要になります。ほかにも、カーネルログを受け取るための追加設定も必要です。詳細は、後に「拡張モジュールの利用」で解説します。
$ModLoad imuxsock
注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
テンプレートの定義には、マクロ以外に、定型メッセージを埋め込むこともできます。
$template mytemplate,"日時:%timegenerated% 内容:%msg%\n" mail.*/var/log/custom.log;mytemplate
利用可能な主なマクロには、表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」を参照してください。
Copyright © ITmedia, Inc. All Rights Reserved.