Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

25.3. Rsyslog の基本設定

rsyslog の主な設定ファイルは /etc/rsyslog.conf です。ここでは、グローバルディレクティブモジュール、および フィルター 部分および アクション 部分で構成される ルール を指定できます。また、ハッシュ記号 (#) の後にテキスト形式でコメントを追加することもできます。

25.3.1. フィルター

ルールは、syslog メッセージのサブセットを選択する フィルターの部分と、選択したメッセージで何をするかを指定する アクションの部分で指定されます。/etc/rsyslog.conf 設定ファイルでルールを定義するには、フィルターとアクションの両方を 1 行で定義し、1 つ以上の空白またはタブで区切ります。
rsyslog は、選択したプロパティーに従って syslog メッセージをフィルターする様々な方法を提供します。利用可能なフィルタリングの方法は、Facility/Priority ベースProperty ベースExpression ベース の 3 種類のフィルターに分けられます。
Facility (ファシリティー) /Priority (優先度) ベースのフィルター
syslog メッセージのフィルターに最もよく知られた方法は、syslog メッセージをフィルターするファシリティー/優先度ベースのフィルターを使用して、2 つの条件( ファシリティー および 優先度 をドットで区切る)を使用することです。セレクターを作成するには以下の構文を使用します。
FACILITY.PRIORITY
詳細は以下のようになります。
  • FACILITY は、特定の syslog メッセージを生成するサブシステムを指定します。たとえば、mail サブシステムはメール関連のすべての syslog メッセージを処理します。FACILITY は、以下のキーワード(または数値コード)のいずれかで表示できます。 kern (0), user (1), mail (2), daemon (3), auth (4), syslog (5), lpr (6)、news (7)、uucp (8)、cron (9)、authpriv (10)、ftp (11)、および local0 through local7 (16 - 23)
  • PRIORITY は、syslog メッセージの優先度を指定します。PRIORITY は以下のキーワード(または数字)のいずれかで表示できます。debug (7)、info (6)、notice (5)、warning (4)、err (3)、crit (2)、alert (1)、および emerg (0)。
    上記の構文は、定義された優先度もしくは より高い 優先度で syslog メッセージを選択します。いずれかの優先度のキーワード前に等号 (=) を付けると、指定された優先度の syslog メッセージのみ選択されることが指定されます。他のすべての優先度は無視されます。反対に、感嘆符 (!) を優先度のキーワードの前に付けると、この優先度以外のすべての syslog メッセージが選択されます。
上記で指定されているキーワード以外に、アスタリスク (*) を使用してすべてのファシリティーもしくは優先度を定義することもできます (アスタリスクをコンマの前か後に配置するかによる)。優先度キーワード none を指定すると、優先度のないファシリティーを指定することになります。ファシリティーおよび優先度の条件は、どちらも大文字と小文字を区別しません。
定義するファシリティーや優先度が複数になる場合は、コンマ (,) を使用して区切ります。同じ行に複数のセレクターを定義するには、セミコロン (;) を使用して区切ります。セレクターフィールド内の各セレクターは、以前のものを上書きすることに注意してください。これにより、パターンから優先度が除外される可能性があります。

例25.1 ファシリティー/優先度ベースのフィルター

以下は、/etc/rsyslog.conf で指定できる単純な facility/priority ベースのフィルターの例です。優先度ですべてのカーネル syslog メッセージを選択するには、設定ファイルに以下のテキストを追加します。
kern.*
優先度が crit 以上になるメール syslog メッセージすべてを選択するには、以下の形式を使用します。
mail.crit
info または debug の優先度以外のすべての cron syslog メッセージを選択するには、設定ファイルで以下の形式を設定します。
cron.!info,!debug
プロパティーベースのフィルター
プロパティーベースのフィルターを使用すると、timegeneratedsyslogtag などのプロパティーで syslog メッセージをフィルターできます。プロパティーに関する詳細情報は、「プロパティー」 を参照してください。指定された各プロパティーは、表25.1「プロパティベースの比較処理」 で一覧表示されている比較処理のいずれかを使用して特定の値に対して比較できます。プロパティー名と比較処理はどちらも大文字と小文字を区別します。
プロパティーベースのフィルターは、コロン (:) で開始する必要があります。フィルターの定義には、以下の構文を使用します。
:PROPERTY, [!]COMPARE_OPERATION, "STRING"
詳細は以下のようになります。
  • PROPERTY 属性は希望するプロパティーを指定します。
  • オプションの感嘆符 (!) は比較処理の出力を無効にします。他のブール値演算子は現在、プロパティーベースのフィルターではサポートされていません。
  • COMPARE_OPERATION 属性は、表25.1「プロパティベースの比較処理」 に記載の比較処理のいずれかを指定します。
  • STRING 属性は、プロパティーが提供するテキストの比較先となる値を指定します。この値は、引用符で囲む必要があります。この文字列内の特定の文字をエスケープさせるには (たとえば、引用符 ("))、バックスラッシュ (\) を使用します。

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

比較処理 詳細
contains 提供された文字列が、プロパティーで提供されたテキストのいずれかの部分に適合するかどうかをチェックします。大文字と小文字を区別しない比較を実行するには、contains_i を使用します。
isequal 用意された文字列をプロパティーで提供されたすべてのテキストと比較します。これら 2 つの値が適合するには、完全に等しいものである必要があります。
startswith 提供された文字列が、プロパティーで提供されたテキストのちょうど最初にあるかどうかをチェックします。大文字と小文字を区別しない比較を実行するには、startswith_i を使用します。
regex 指定された POSIX BRE (Basic Regular Expression) をプロパティーが提供したテキストと比較します。
ereregex 指定された POSIX ERE (Extended Regular Expression) 正規表現をプロパティーが提供したテキストと比較します。
isempty プロパティーが空かどうかをチェックします。値は破棄されます。これは、いくつかのフィールドが正規化の結果に基づいて設定される正規化データでの作業時に特に有用です。

例25.2 プロパティーベースのフィルター

以下は、/etc/rsyslog.conf で指定できるプロパティーベースのフィルターの例です。syslog メッセージのテキストに文字列 error が含まれているものを選択するには、以下を使用します。
:msg, contains, "error"
以下のフィルターは、ホスト名 host1 から受信した syslog メッセージを選択します。
:hostname, isequal, "host1"
(fatal lib error など) fatalerror の間にテキストがあるかどうかに関わらず、これらを含まない syslog メッセージを選択するには、以下を入力します。
:msg, !regex, "fatal .* error"
式ベースのフィルター
式ベースのフィルターは、定義されている算術演算、ブール演算、または文字列演算に従って syslog メッセージを選択します。式ベースのフィルターは、rsyslog の独自のスクリプト言語 RainerScript を使用して複雑なフィルターを構築します。
式ベースのフィルターの基本的な構文は、以下のようになります。
if EXPRESSION then ACTION else ACTION
詳細は以下のようになります。
  • EXPRESSION 属性は、$msg startswith 'DEVNAME' または $syslogfacility-text == 'local0' などの評価される式を表しますand および or 演算子を使用して、1 つのフィルターに複数の式を指定できます。
  • ACTION 属性は、式が true の値を返す場合に実行されるアクションを表します。これは単一のアクションの場合と、波括弧で囲まれた任意の複雑なスクリプトになる場合があります。
  • 式ベースのフィルターは、行の最初の if キーワードで示されます。then キーワードは、EXPRESSIONACTION から分離します。オプションで、else キーワードを使用して条件が満たされない場合に実行されるアクションを指定することもできます。
式ベースのフィルターでは、例25.3「式ベースのフィルター」 にあるように、波括弧に囲まれた式を使うことで条件をネスト化することができます。このスクリプトでは、式内で facility/priority-based フィルターを使用することができます。ただし、ここで property-based フィルターを使用することは推奨されません。RainerScript は、特殊な関数 re_match() および re_extract() を含む正規表現をサポートします。

例25.3 式ベースのフィルター

以下の式には、ネスト化された条件が 2 つ含まれています。prog1 と呼ばれるプログラムが生成したログファイルが、メッセージ内の文字列 "test" の有無に基づいて 2 つのファイルに分割されます。
if $programname == 'prog1' then {
   action(type="omfile" file="/var/log/prog1.log")
   if $msg contains 'test' then
     action(type="omfile" file="/var/log/prog1test.log")
   else
     action(type="omfile" file="/var/log/prog1notest.log")
}
様々な式ベースのフィルターの他の例は、「オンラインドキュメント」 を参照してください。RainerScript は rsyslog の新規設定形式の基盤となります。を参照してください。 「新規設定フォーマットの使用」