第20章 ログファイルの表示と管理

ログファイル とは、システムで実行しているカーネル、サービス、アプリケーションなどのシステムに関するメッセージを格納しているファイルです。各情報にはそれぞれ異なるログファイルがあります。例えば、デフォルトのシステムログファイル、セキュリティメッセージ専用のログファイル、cron タスク用のログファイルなどです。
ログファイルは、カーネルドライバーのロードを試行するなどシステムの問題を解決する場合やシステムへの無許可のログイン試行を探す場合に役立ちます。本章では、ログファイルの場所、ログファイルの閲覧方法、ログファイルの注意する項目を説明します。
一部のログファイルは、rsyslogd と呼ばれるデーモンで制御されています。rsyslogd で管理されているログファイルの一覧は /etc/rsyslog.conf 設定ファイル内にあります。
rsyslog は、sysklogd デーモンと置き換わる強化されたマルチスレッドの syslog デーモンです。 rsyslogsysklogd と同じ機能を持ちながら、強化されたフィルタリング、暗号化で保護されたメッセージのリレー、各種設定オプション、TCP または UDP プロトコルによる転送のサポートにより拡張します。rsyslogsysklogd は互換性がある点に注意して下さい。

20.1. rsyslog の設定

rsyslog の主要な設定ファイルは /etc/rsyslog.conf です。これは、グローバル指示文ルール またはコメント (ハッシュ記号 (#) の後に続く空行かテキスト) で構成されます。グローバル指示文とルールについては、後項で詳しく説明します。

20.1.1. グローバル指示文

グローバル指示文は、rsyslogd デーモンに適用する設定オプションを指定します。グローバル指示文は、通常 rsyslogd デーモンの動作や従うルールに影響する特定の事前定義された変数の値を指定します。すべてのグローバル指示文は、ドル記号 ($) で始まらなければなりません。1 行に指定できるのは、 1 つの指示文のみです。以下は、syslog メッセージキューの最大サイズを指定するグローバル指示文の例です:
$MainMsgQueueSize 50000
この指示文用に定義されたデフォルトのサイズ (10,000 メッセージ) は、別の値を指定することで上書きされます (上記の例を参照)。
/etc/rsyslog.conf 設定ファイル内では、複数の指示文を定義することができます。指示文は、同じ指示文が再度検出されるまですべての設定オプションの動作に影響します。
すべての利用可能な設定指示文とそれらの詳しい説明を含む総合一覧は、/usr/share/doc/rsyslog-<version-number>/rsyslog_conf_global.html を参照して下さい。 

20.1.2. モジュール

rsyslog は、そのモジュール式設計により、動的な機能を持つ各種の モジュール を提供します。モジュールは、サードパーティによる書き込みが可能な点に注意して下さい。大半のモジュールは、追加の入力 (以下の 入力モジュール を参照) または出力 (以下の 出力モジュール を参照) を提供します。各モジュール毎に特有の機能を提供するモジュールもあります。また、モジュールのロード後に利用可能になる追加の設定指示文を提供するモジュールもあります。モジュールをロードするには、以下の構文を使用します:
$ModLoad <MODULE>
$ModLoad は指定されたモジュールをロードするグローバル指示文であり、<MODULE> は目的のモジュールです。例えば、Text File Input Module (imfilersyslog を有効にして標準テキストファイルを syslog メッセージに変換) をロードしたい場合、/etc/rsyslog.conf 設定ファイルで以下の行を指定します: 
$ModLoad imfile
rsyslog は、以下のような主要カテゴリに分割される多くのモジュールを提供します:
  • 入力モジュール — 入力モジュールは、様々なソースからメッセージを収集します。入力モジュールの名前は、常に imfileimrelp のように接頭辞 im で始まります。 
  • 出力モジュール — 出力モジュールは、様々な対象にメッセージを格納する機能を提供します。例えば、ネットワーク上でのメッセージの送信、データベースへのメッセージの格納やその暗号化などです。出力モジュールの名前は、omsnmpomrelp のように常に接頭辞 om で始まります。
  • フィルターモジュール — フィルターモジュールは、指定されたルールに従ってメッセージをフィルターできます。フィルターモジュールの名前は、常に接頭辞 fm で始まります。
  • パーサモジュール — パーサモジュールは、メッセージパーサを使用して受信メッセージの内容を構文解析します。パーサモジュールの名前は、pmrfc5424pmrfc3164 のように常に接頭辞 pm で始まります。
  • メッセージ修正モジュール — メッセージ修正モジュールは、syslog メッセージの内容を変更します。メッセージ修正モジュールは、その実装に関してのみ出力モジュールやフィルターモジュールとは異なりますが、同じインターフェースを共有します。 
  • 文字列ジェネレーターモジュール — 文字列ジェネレーターモジュールは、メッセージの内容を基にして文字列を生成し、rsyslog により提供されるテンプレート機能とよく動作します。テンプレートの詳細については、「テンプレート」 を参照して下さい。文字列ジェネレーターモジュールの名前は、smfilesmtradfile のように常に接頭辞 sm で始まります。
  • ライブラリモジュール — ライブラリモジュールは、通常他のロード可能なモジュールに機能性を提供します。これらのモジュールは、必要な場合に rsyslog により自動的にロードされ、ユーザーは設定できません。
すべての利用可能なモジュールとそれらの詳しい説明を含む総合一覧は、http://www.rsyslog.com/doc/rsyslog_conf_modules.html を参照して下さい。

警告

rsyslog がモジュールをロードする場合、モジュールに対して一部の機能とデータへのアクセスを提供します。これはセキュリティ上の脅威となる可能性があります。セキュリティリスクを最小限にするために、信頼できるモジュールのみを使用するようにして下さい。

20.1.3. ルール

ルールは、syslog メッセージのサブセットを選択する フィルター 部分と、選択したメッセージで実行する内容を指定する 動作 部分により指定されます。/etc/rsyslog.conf 設定ファイル内でルールを定義するには、フィルターとアクションの両方を 1 行で 1 つ以上の空白かタブで区切って定義します。フィルターの詳細については 「フィルターの条件」 を、動作の詳細については 「動作」 を参照して下さい。

20.1.3.1. フィルターの条件

rsyslog には、各種プロパティに従って syslog メッセージをフィルターする様々な方法があります。本項では、最も使用されるフィルターの条件を要約しています。
Facility (ファシリティ) /Priority (優先度) ベースのフィルター
syslog メッセージのフィルター動作で最も使用され良く知られているのは、ファシリティ/優先度をベースにしたフィルターです。これは、facility (ファシリティ)priority (優先度) の 2 つの条件を基にして syslog メッセージをフィルターします。セレクターを作成するには、以下の構文を使用します:
<FACILITY>.<PRIORITY>
ここで:
  • <FACILITY> は、特定の syslog メッセージを生成するサブシステムを指定します。例えば、mail サブシステムは、メール関連の全 syslog メッセージを処理します。<FACILITY> は、次のいずれかのキーワードで表すことができます: authauthprivcrondaemonkernlprmailnewssysloguseruucp 及び local0 から local7
  • <PRIORITY> は、syslog メッセージの優先度を指定します。<PRIORITY> は、次のいずれかのキーワードで表すことができます (昇順で表示): debuginfonoticewarningerrcritalert 及び emerg
    優先度の前に等号 (=) を付けることによって、その優先度を持つ syslog メッセージのみが選択されるよう指定します。他のすべての優先度は無視されます。逆に、優先度の前に感嘆符 (!) を付けると、定義された優先度を持つメッセージ以外の全 syslog メッセージが選択されます。これらの 2 つの拡張子のどちらも使用しないと、定義済みあるいは優先度が高い syslog メッセージが選択されます。
上記で指定したキーワードに加えて、アスタリスク (*) を使用して (アスタリスクを配置する場所がドットの前か後ろかにより)、すべてのファシリティ/優先度を定義することができます。none のキーワードを指定すると、優先度のないファシリティを指定することになります。
複数のファシリティと優先度を定義するには、単にカンマ (,) で区切るだけです。複数のフィルターを 1 行で定義するには、セミコロン (;) で区切ります。
以下に、簡単なファシリティ/優先度をベースにしたフィルターの例をいくつか示します:
kern.*    # Selects all kernel syslog messages with any priority
mail.crit    # Selects all mail syslog messages with priority crit and higher.
cron.!info,!debug    # Selects all cron syslog messages except those with the info or debug priority.
プロパティベースのフィルター
プロパティベースのフィルターを使用すると、timegeneratedsyslogtag などのプロパティによって syslog メッセージをフィルターできます。プロパティの詳細については、「プロパティ」 を参照して下さい。フィルターで指定された各プロパティを使うと、表20.1「プロパティベースの比較処理 」 に一覧表示されているいずれかの比較処理を使用してプロパティと特定の値を比較することができます。

表20.1 プロパティベースの比較処理 

比較処理 詳細
contains 指定された文字列が、プロパティにより提供されたテキストの一部にマッチするかどうかを確認します。
isequal 指定された文字列を、プロパティにより提供されたすべてのテキストと比較します。
startswith 指定された文字列が、プロパティにより提供されたテキストの接頭辞にマッチするかどうかを確認します。
regex 指定された POSIX BRE (Basic Regular Expression) 正規表現をプロバティにより提供されたテキストと比較します。
ereregex 指定された POSIX ERE (Extended Regular Expression) 正規表現をプロパティにより提供されたテキストと比較します。
プロパティベースのフィルターを定義するには、以下の構文を使用します:
:<PROPERTY>, [!]<COMPARE_OPERATION>, "<STRING>"
ここで:
  • <PROPERTY> 属性は、希望するプロパティ (例えば timegeneratedhostname) を指定します。
  • オプションの感嘆符 (!) は、(比較処理の前に置く場合は) 比較処理の出力を無効にします。
  • <COMPARE_OPERATION> 属性は、表20.1「プロパティベースの比較処理 」 内に一覧表示されているいずれかの比較処理を指定します。
  • <STRING> 属性は、プロパティにより提供されるテキストの比較対象となる値を指定します。特定の文字 (引用符 (") など) をエスケープさせるには、バックスラッシュ記号 (\) を使用します。
以下は、プロパティベースのフィルターの例です:
  • 以下のフィルターは、メッセージテキスト内に文字列 error を含む syslog メッセージを選択します:
    :msg, contains, "error"
  • 以下のフィルターは、ホスト名 host1 から受信した syslog メッセージを選択します: 
    :hostname, isequal, "host1"
  • 以下のフィルターは、fatalerror という単語の間にテキストがあるかどうかに関わらず (fatal lib error など)、それらの名前を含まない syslog メッセージを選択します:
    :msg, !regex, "fatal .* error"
式ベースのフィルター
式ベースのフィルターは、定義済み算術演算、ブール演算または文字列演算に従って syslog メッセージを選択します。式ベースのフィルターは、rsyslog 自身のスクリプト言語を使用します。この言語の構文は、様々な式ベースのフィルターの例と共に /usr/share/doc/rsyslog-<version-number>/rscript_abnf.html で定義されています。
式ベースのフィルターを定義するには、以下の構文を使用します:
if <EXPRESSION> then <ACTION>
ここで:
  • <EXPRESSION> 属性は、$msg startswith 'DEVNAME'$syslogfacility-text == 'local0' など評価される式を表します。
  • <ACTION> 属性は、式が true の値を返す場合に実行される動作を表します。

注記

式ベースのフィルターを定義する場合は、1 行内で定義しなければなりません。

注記

正規表現は、式ベースのフィルターでは現在サポートされていません。
BSD スタイルのブロック
rsyslog は、/etc/rsyslog.conf 設定ファイル内にある BSD スタイルのブロックをサポートします。各ブロックは、プログラムまたはホスト名のラベルの後に来るルールで構成されています。プログラムを含める場合は '!<PROGRAM>' ラベルを、除外する場合は '-<PROGRAM>' ラベルをそれぞれ使用します。また、ホスト名を含める場合は '+<HOSTNAME> ' ラベルを、除外する場合は '-<HOSTNAME> ' ラベルをそれぞれ使用します。
例20.1「BSD スタイルのブロック」 は、yum で生成された全メッセージをファイルに保存する BSD スタイルのブロックを示しています。

例20.1 BSD スタイルのブロック

!yum
*.*      /var/log/named.log

20.1.3.2. 動作

動作は、既に定義されたセレクターでフィルターされたメッセージで実行する内容を指定します。以下に、ルール内で定義できる動作をいくつか示します:
ログファイルへの syslog メッセージの保存
動作の多くは、syslog メッセージが保存されるログファイルを指定します。これは既に定義されたセレクターの後にファイルパスを指定することで実行できます。以下のルールは、すべての cron syslog メッセージを選択するセレクターとそれらのメッセージを /var/log/cron.log ログファイルに保存する動作で構成されています:
cron.* /var/log/cron.log
ダッシュ記号 (-) は、全 syslog メッセージの生成後に希望するログファイルの同期化を行わない場合に指定するファイルパスの接頭辞として使用します。
ファイルパスは、静的または動的のどちらかを指定できます。静的ファイルは上記の例のように、簡単なファイルパスで表されます。動的ファイルは、テンプレートと疑問符 (?) の接頭辞で表されます。テンプレートの詳細については、「動的なファイル名の生成」 を参照して下さい。
syslog メッセージは、指定したファイルが既存の tty である場合は標準出力 (特別な tty- 処理を使用)、指定したファイルが /dev/console のデバイスである場合はコンソール (特別な /dev/console- 処理を使用) へ X Window System 使用時にそれぞれ送信されます。
ネットワーク上での syslog メッセージの送信
rsyslog を使用すると、ネットワーク上で syslog メッセージを送受信できます。この機能により、1 台のマシン上で複数ホストの syslog メッセージを管理することができます。syslog メッセージをリモートマシンに転送するには、以下の構文を使用します:
@[(<OPTION>)]<HOST>:[<PORT>]
ここで:
  • アットマーク (@) は、syslog メッセージが UDP プロトコルを使用してホストへ転送されることを示します。TCP プロトコルを使用するには、2 つのアットマークを空白なしで (@@) 使用します。
  • <OPTION> 属性は、z<NUMBER> のようなオプションと置換できます。このオプションを使用すると、syslog メッセージの zlib 圧縮が可能です。<NUMBER> の属性は、圧縮レベルを指定します。複数のオプションを定義するには、それぞれカンマ (,) で区切るだけです。
  • <HOST> 属性は、選択した syslog メッセージを受信するホストを指定します。
  • <PORT> 属性は、ホストマシンのポートを指定します。
IPv6 アドレスをホストとして指定する場合は、アドレスを角括弧 ([, ]) で囲みます。
以下は、ネットワーク上で syslog メッセージを転送する動作の例です (すべての動作には、いずれかの優先度を持つ全メッセージを選択するセレクターが前に付いている点に注意して下さい)。
*.* @192.168.0.1    # Forwards messages to 192.168.0.1 via the UDP protocol
*.* @@example.com:18    # Forwards messages to "example.com" using port 18 and the TCP protocol
*.* @(z9)[2001::1]    # Compresses messages with zlib (level 9 compression)
                      # and forwards them to 2001::1 using the UDP protocol
出力チャンネル
出力チャンネルは、主にログファイルのローテーション、つまりログファイルが拡張できる最大サイズを指定するために使用されます (ログファイルのローテーションに関する詳細は 「logrotate の設定」 を参照)。出力チャンネルを定義するには、以下の構文を使用します:
$outchannel <NAME>, <FILE_NAME>, <MAX_SIZE>, <ACTION>
ここで:
  • <NAME> 属性は、出力チャンネルの名前を指定します。
  • <FILE_NAME> 属性は、出力ファイルの名前を指定します。
  • <MAX_SIZE> 属性は、(<FILE_NAME> 内にある) 指定されたファイルが拡張できる最大サイズを表します。この値は バイト 単位で指定します。
  • <ACTION> 属性は、<MAX_SIZE> で定義される最大サイズに到達した時に取るべき動作を指定します。
例20.2「出力チャンネルのログローテーション」 は、出力チャンネルを使用した簡単なログローテーションを示しています。最初に、出力チャンネルは $outchannel 指示文により定義され、その後ルールで使用されます。このルールは、いずれかの優先度を持つすべての syslog メッセージを選択して、取得した syslog メッセージで事前定義された出力チャンネルを使用します。上限 (例では 100 MB) に到達すると、/home/joe/log_rotation_script が使用されます。このスクリプトに含まれるのは、異なるフォルダーへのファイルの移動、その中にある特有のコンテンツの編集/削除です。

例20.2 出力チャンネルのログローテーション

$outchannel log_rotation,/var/log/test_log.log, 104857600, /home/joe/log_rotation_script

*.* $log_rotation

注記

現在、出力チャンネルは rsyslog でサポートされていますが、近い将来サポートされなくなります。
特定ユーザーへの syslog メッセージの送信
メッセージを送信したい相手のユーザー名を指定するだけで、rsyslog はそのユーザーに syslog メッセージを送信することができます。複数のユーザーを指定するには、各ユーザー名をカンマ (,) で区切ります。現在ログオンしている全ユーザーにメッセージを送るには、アスタリスク (*) を使用します。
プログラムの実行
rsyslog により、選択された syslog メッセージ用のプログラムを実行することができ、system() 呼び出しを使用してシェル内でプログラムを実行します。実行するプログラムを指定するには、そのプログラムの前にキャレットの記号 (^) を付けます。指定後、受信したメッセージをフォーマットしてそれを 1 行のパラメーターとして指定した実行ファイルに渡すテンプレートを指定します (テンプレートの詳細については 「テンプレート」 を参照)。以下の例では、いずれかの優先度を持つ任意の syslog メッセージが選択され、template テンプレートでフォーマットされ、パラメーターとして test-program プログラムに渡されます。その後、このプログラムは指定されたパラメーターで実行されます: 
*.* ^test-program;template

警告

ホストからのメッセージを受け取り、シェル実行動作を使用する場合は、コマンドインジェクションの脆弱性が存在する場合があります。攻撃者は、ユーザーが実行するよう (操作により) 指定したプログラム内で攻撃者が指定するコマンドを挿入して実行するよう試行する場合があります。あらゆるセキュリティ脅威を回避するために、シェル実行動作の使用は十分に考慮して下さい。
データベースへの syslog メッセージの入力
選択された syslog メッセージは、データベースライター の動作を使用して、直接データベーステーブルに書き込むことができます。データベースライターは、以下の構文を使用します:
:<PLUGIN>:<DB_HOST>,<DB_NAME>,<DB_USER>,<DB_PASSWORD>;[<TEMPLATE>]
ここで:
  • <PLUGIN> は、データベースの書き込みを処理する指定プラグインを呼び出します (例えば ommysql プラグイン)。
  • <DB_HOST> 属性は、データベースのホスト名を指定します。
  • <DB_NAME> 属性は、データベースの名前を指定します。
  • <DB_USER> 属性は、データベースのユーザーを指定します。
  • <DB_PASSWORD> 属性は、前述のデータベースユーザーが使用するパスワードを指定します。
  • <TEMPLATE> 属性は、オプションである syslog メッセージを修正するテンプレートの使用を指定します。テンプレートの詳細については、「テンプレート」 を参照して下さい。

重要

現在、rsyslogMySQL (詳細は /usr/share/doc/rsyslog-<version-number>/rsyslog_mysql.html を参照) データベースと PostgreSQL データベースのみに対応しています。MySQL および PostgreSQL のデータベースライター機能を使用するには、rsyslog-mysql および rsyslog-pgsql パッケージをそれぞれインストールします。また、/etc/rsyslog.conf 設定ファイルに適切なモジュールをロードするようにして下さい。
$ModLoad ommysql    # Output module for MySQL support
$ModLoad ompgsql    # Output module for PostgreSQL support
rsyslog モジュールの詳細については、「モジュール」 を参照して下さい。
別の方法として、omlibdb モジュールで提供される汎用のデータベースインターフェースも使用することができます。ただし、このモジュールは現在コンパイルされていません。
syslog メッセージの破棄
選択したメッセージを破棄するには、チルダの記号 (~) を使用します。以下のルールは、すべての cron syslog メッセージを破棄します:
cron.* ~
各セレクターごとに、複数の動作を指定することができます。1 つのセレクターに複数の動作を指定するには、各動作を別々の行に書き込み、それらの先頭にアンパサンドの記号 (&) を付けます。最初の動作だけがその行内でセレクターを指定できます。以下は、複数の動作を持つルールの一例です:
kern.=crit joe
& ^test-program;temp
& @192.168.0.1
上記の例では、クリティカルな優先度 (crit) を持つすべてのカーネル syslog メッセージが、ユーザー joe に送信され、テンプレート temp により処理された後、test-program 実行ファイルに渡されます。その後、UDP プロトコルを介して 192.168.0.1 に転送されます。
指定されたセレクターが評価されるのは 1 回のみであるため、複数の動作を指定すると、希望する結果の全体的なパフォーマンスが向上します。
どの動作の後にも、メッセージをフォーマットするテンプレートを続けることができる点に注意して下さい。テンプレートを指定するには、動作の末尾にセミコロン (;) を付けてテンプレートの名前を指定します。

警告

テンプレートは動作で使用される前に定義する必要があります。そうしないと、無視されます。
テンプレートの詳細については 「テンプレート」 を参照して下さい。

20.1.3.3. テンプレート

rsyslog で生成される出力は、テンプレートを使用することでユーザーのニーズに応じた修正とフォーマットを行うことができます。テンプレートを作成するには、以下の構文を使用します:
$template <TEMPLATE_NAME>,"text %<PROPERTY>% more text", [<OPTION>]
ここで:
  • $template は、後続のテキストがテンプレートを定義することを意味するテンプレート指示文です。
  • <TEMPLATE_NAME> はテンプレートの名前です。この名前を使ってテンプレートを参照します。
  • 二重引用符 ("") の間にあるものはすべて、実際のテンプレートテキストです。このテキスト内では、改行のための \n や行頭復帰のための \r などの機能を使用する目的で文字をエスケープすることができます。%" のような他の文字を文字どおりに使用したい場合にはエスケープする必要があります。
    2 つのパーセント記号 (%) 内で指定されたテキストは、プロパティの実際の値と結果的に置き換わる プロパティ を指定します。プロパティの詳細については、「プロパティ」 を参照して下さい。
  • <OPTION> 属性は、テンプレートの機能を修正するオプションを指定します。これらをテンプレートテキストの内部 ("" の間) で定義されているプロパティのオプションと混同しないで下さい。現在サポートされているテンプレートのオプションは、SQL クエリとしてテキストのフォーマット用に使用される sqlstdsql です。

    注記

    データベースライター (詳細は 「動作」 にある 『データベースへの syslog メッセージの入力』 の項を参照) は、sql 及び stdsql のオプションがテンプレート内で指定されているかどうかを確認します。指定されていないと、データベースライターは何も動作を起こしません。これは SQL インジェクションなど、あらゆるセキュリティ脅威の可能性を排除するためです。
20.1.3.3.1. 動的なファイル名の生成
テンプレートを使用して、動的なファイルの名前を生成することができます。プロパティをファイルパスの一部として指定することで、それぞれ一意のプロパティに対して新しいファイルが作成されます。例として、timegenerated プロパティを使用して、各 syslog メッセージ用に一意のファイル名を生成します:
$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"
$template 指示文は、単にテンプレートを指定するだけである点に注意して下さい。この指示文を有効にするには、ルール内で使用しなければなりません。
*.* ?DynamicFile
20.1.3.3.2. プロパティ
テンプレート内 ( 2 つのパーセント記号 (%) の内側) で定義されたプロパティにより、プロパティ置換 を使用することで syslog メッセージの各種コンテンツにアクセスできます。テンプレート内 ( 2 つの二重引用符 ("") の間) でプロパティを定義するには、以下の構文を使用します:
%<PROPERTY_NAME>[:<FROM_CHAR>:<TO_CHAR>:<OPTION>]%
ここで:
  • <PROPERTY_NAME> 属性は、プロパティの名前を指定します。すべての利用可能なプロパティとその詳しい説明を含む総合一覧は、利用可能なプロパティ のセクションの /usr/share/doc/rsyslog-<version-number>/property_replacer.html にあります。
  • <FROM_CHAR> 属性と <TO_CHAR> 属性は、指定されたプロパティが動作する文字の範囲を表します。別の方法として、正規表現を使用して文字の範囲を指定することもできます。このためには、文字 R<FROM_CHAR> 属性として指定し、希望する正規表現を <TO_CHAR> 属性として指定します。
  • <OPTION> 属性は、プロパティのオプションを指定します。利用可能なプロパティとその詳しい説明を含む総合一覧は、プロパティオプション のセクションの /usr/share/doc/rsyslog-<version-number>/property_replacer.html にあります。
簡単なプロパティの例をいくつか以下に示します:
  • 以下のプロパティは、syslog メッセージの全メッセージテキストを単に取得するだけです:
    %msg%
  • 以下のプロパティは、syslog メッセージにあるメッセージテキストの最初の 2 文字を取得します:
    %msg:1:2%
  • 以下のプロパティは、syslog メッセージの全メッセージテキストを取得して、最後のラインフィード文字を省きます:
    %msg:::drop-last-lf%
  • 以下のプロパティは、syslog メッセージの受信時に生成されるタイムスタンプの最初の 10 文字を取得して、RFC 3999 日付基準に従ってそれをフォーマットします:
    %timegenerated:1:10:date-rfc3339%
20.1.3.3.3. テンプレートの例
本項は、rsyslog テンプレートの例をいくつか示しています。
例20.3「詳細な syslog メッセージのテンプレート」 は、syslog メッセージをフォーマットするテンプレートを示しています。そのため、メッセージの重要性、機能、メッセージ受信時のタイムスタンプ、ホスト名、メッセージタグ及びメッセージテキストを出力して、改行して終了します。

例20.3 詳細な syslog メッセージのテンプレート

$template verbose,"%syslogseverity%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%
"
例20.4「ウォールメッセージのテンプレート」 は、従来型のウォールメッセージ (全ユーザーに送られるメッセージ。ここでのユーザーは、ログインしており、mesg(1) パーミッションが yes に設定されているユーザーを意味します) に似たテンプレートを示しています。このテンプレートは、改行した行 (\r\n を使用) にホスト名、メッセージタグ、タイムスタンプと共にメッセージテキストを出力してビープ音 (\7 の使用) を鳴らします。

例20.4 ウォールメッセージのテンプレート

$template wallmsg,"\r
\7Message from syslogd@%HOSTNAME% at %timegenerated% ...\r
 %syslogtag% %msg%
\r"
例20.5「データベースフォーマットをしたメッセージのテンプレート」 は、syslog メッセージをフォーマットしてデータベースクエリとして使用できるようにするテンプレートを示しています。テンプレートオプションとして指定されている、テンプレートの最後にある sql オプションの使用に注目して下さい。これは、データベースライターに対してメッセージを MySQL SQL クエリとしてフォーマットするように指示します。

例20.5 データベースフォーマットをしたメッセージのテンプレート

$template dbFormat,"insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%',%syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",sql
また、rsyslog には RSYSLOG_ の接頭辞で特定される事前定義済みのテンプレートセットも含まれています。競合を回避するため、この接頭辞を使用したテンプレートは作成しないことが推奨されます。以下の一覧では、これらの事前定義されたテンプレートとその定義を示しています。
RSYSLOG_DebugFormat
"Debug line with all properties:
FROMHOST: '%FROMHOST%', fromhost-ip: '%fromhost-ip%', HOSTNAME: '%HOSTNAME%', PRI: %PRI%,
syslogtag '%syslogtag%', programname: '%programname%', APP-NAME: '%APP-NAME%', PROCID: '%PROCID%', MSGID: '%MSGID%',
TIMESTAMP: '%TIMESTAMP%', STRUCTURED-DATA: '%STRUCTURED-DATA%',
msg: '%msg%'
escaped msg: '%msg:::drop-cc%'
rawmsg: '%rawmsg%'

\"
RSYSLOG_SyslogProtocol23Format
"<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%
\"
RSYSLOG_FileFormat
"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%
\"
RSYSLOG_TraditionalFileFormat
"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%
\"
RSYSLOG_ForwardFormat
"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"
RSYSLOG_TraditionalForwardFormat
"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"

20.1.4. rsyslog コマンドラインの設定

sysklogd と同様に、一部の rsyslog の機能はコマンドラインオプションを使って設定できます。rsyslog のバージョン 3 では、このメソッドは非推奨であった点に注意して下さい。これらのオプションのいくつかを有効にするには、rsyslog が実行する互換性モードを指定しなければなりません。ただし、コマンドラインオプションを使った rsyslog の設定は避けることをお勧めします。
rsyslog が実行すべき互換モードを指定するには、-c オプションを使用します。パラメーターが指定されていない時は、rsyslogsysklogd と互換性を持つよう試みます。これは、適宜設定を修正する設定指示文をアクティベートすることで部分的に可能です。そのため、使用している rsyslog のメジャーバージョンに一致する番号をこのオプションに指定して、/etc/rsyslog.conf 設定ファイルをそれに応じて更新することが推奨されます。例えば、sysklogd オプション (rsyslog のバージョン 3 で非推奨) を使用したい場合は、以下のコマンドを実行します:
~]# rsyslogd -c 2
後方互換モードを含む rsyslogd デーモンへ渡されるオプションは、/etc/sysconfig/rsyslog 設定ファイル内で指定できます。
各種 rsyslogd オプションの詳細については、man rsyslogd を参照して下さい。