Menu Close

Red Hat Training

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

23.2. Rsyslog の基本設定

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

23.2.1. フィルター

ルールは、syslog メッセージのサブセットを選択する フィルターの部分と、選択したメッセージで何をするかを指定する アクションの部分で指定されます。/etc/rsyslog.conf 設定ファイル内でルールを定義するには、フィルターとアクションの両方を同じ行に、1 つ以上の空白かタブで区切って定義します。

rsyslog は、選択されたプロパティーに従って syslog メッセージをフィルターする様々な方法を提供します。利用可能なフィルタリングの方法は、Facility/Priority ベースProperty ベースExpression ベース の 3 種類のフィルターに分けられます。

Facility (ファシリティー) /Priority (優先度) ベースのフィルター

syslog メッセージをフィルターする最もよく知られた方法は、syslog メッセージをフィルターするファシリティー/priority ベースのフィルターを使用して、2 つの条件 (ファシリティー および 優先度をドットで区切る) を使用することです。セレクターを作成するには以下の構文を使用します。

FACILITY.PRIORITY

詳細は以下のようになります。

  • FACILITY は、特定の syslog メッセージを作成するサブシステムを指定します。たとえば、mail サブシステムはメール関連のすべての syslog メッセージを処理します。FACILITY は、以下のキーワード (または数字コード) のいずれかで表すことができます。kern (0), user (1)、mail (2)、daemon (3)、auth (4), syslog (5)、lpr (6)、news (7)、cron (8)、authpriv (9)、ftp (10)、および local0 ~ 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 を指定すると、優先度のないファシリティーを指定することになります。ファシリティーおよび優先度の条件は、どちらも大文字と小文字を区別しません。

    定義するファシリティーや優先度が複数になる場合は、コンマ (,) を使用して区切ります。同じ行に複数のセレクターを定義するには、セミコロン (;) を使用して区切ります。セレクターフィールド内の各セレクターは、以前のものを上書きすることに注意してください。これにより、パターンから優先度が除外される可能性があります。

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

    以下は、/etc/rsyslog.conf で指定できる単純な facility/priority ベースのフィルターの例です。優先度ですべてのカーネル syslog メッセージを選択するには、設定ファイルに以下のテキストを追加します。

    kern.*

    優先度が crit 以上になるメール syslog メッセージすべてを選択するには、以下の形式を使用します。

    mail.crit

    info または debug 優先度以外のすべての cron syslog メッセージを選択するには、設定ファイルで以下の形式を設定します。

    cron.!info,!debug
プロパティーベースのフィルター

プロパティベースのフィルターでは、timegeneratedsyslogtag などのプロパティーで syslog メッセージのフィルター処理ができます。プロパティーに関する詳細情報は、「プロパティー」 を参照してください。指定された各プロパティーは、表23.1「プロパティベースの比較処理」 で一覧表示されている比較処理のいずれかを使用して特定の値に対して比較できます。プロパティー名と比較処理はどちらも大文字と小文字を区別します。

プロパティーベースのフィルターは、コロン (:) で開始する必要があります。フィルターの定義には、以下の構文を使用します。

:PROPERTY, [!]COMPARE_OPERATION, "STRING"

詳細は以下のようになります。

  • PROPERTY 属性は希望するプロパティーを指定します。
  • オプションの感嘆符 (!) は比較処理の出力を無効にします。他のブール値演算子は現在、プロパティーベースのフィルターではサポートされていません。
  • COMPARE_OPERATION 属性は、表23.1「プロパティベースの比較処理」 に一覧表示してある比較処理のいずれかを指定します。
  • STRING 属性は、プロパティーが提供するテキストの比較対象となる値を指定します。この値は、引用符で囲む必要があります。この文字列内の特定の文字をエスケープさせるには (たとえば、引用符 ("))、バックスラッシュ (\) を使用します。

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

    比較処理詳細

    contains

    提供された文字列が、プロパティーで提供されたテキストのいずれかの部分に適合するかどうかをチェックします。

    isequal

    用意された文字列をプロパティーで提供されたすべてのテキストと比較します。これら 2 つの値が適合するには、完全に等しいものである必要があります。

    startswith

    提供された文字列が、プロパティーで提供されたテキストのちょうど最初にあるかどうかをチェックします。

    regex

    指定された POSIX BRE (Basic Regular Expression) をプロパティーが提供したテキストと比較します。

    ereregex

    指定された POSIX ERE (Extended Regular Expression) 正規表現をプロパティーが提供したテキストと比較します。

    isempty

    プロパティーが空かどうかをチェックします。値は破棄されます。これは、いくつかのフィールドが正規化の結果に基づいて設定される正規化データでの作業時に特に有用です。

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

    以下は、/etc/rsyslog.conf で指定できるプロパティーベースのフィルターの例です。syslog メッセージのテキストに文字列 error が含まれているものを選択するには、以下を使用します。

    :msg, contains, "error"

    以下のフィルターは、ホスト名 host1 から受信した syslog メッセージを選択します。

    :hostname, isequal, "host1"

    (fatal lib error など) fatalerror の間にテキストがあるかどうかに関わらず、これらを含まない syslog メッセージを選択するには、以下を入力します。

    :msg, !regex, "fatal .* error"
式ベースのフィルター

式ベースのフィルターは、定義されている算術演算、ブール演算、または文字列演算に従って syslog メッセージを選択します。複雑なフィルターを構築するために、式ベースのフィルターは、RainerScript と呼ばれる rsyslog の独自のスクリプト言語を使用します。

式ベースのフィルターの基本的な構文は、以下のようになります。

if EXPRESSION then ACTION else ACTION

詳細は以下のようになります。

  • EXPRESSION 属性は、$msg startswith 'DEVNAME'$syslogfacility-text == 'local0' などの評価される式を表します。and および or 演算子を使用することで、単一フィルター内に複数の式を指定できます。

    rsyslog は、式ベースのフィルターでは、大文字と小文字を区別しない比較をサポートすることに注意してください。EXPRESSION 属性内の contains_i または startswith_i compare-operations を使用できます。以下に例を示します。

    if $hostname startswith_i "<HOST_NAME>" then ACTION.

  • ACTION 属性は、式が true の値を返す場合に実行される動作を表します。これは単一のアクションの場合と、波括弧で囲まれた任意の複雑なスクリプトになる場合があります。
  • 式ベースのフィルターは、行の最初の if キーワードで示されます。then キーワードは、EXPRESSIONACTION から離します。オプションで、else キーワードを使用して条件が満たされない場合に実行されるアクションを指定することもできます。

    式ベースのフィルターでは、例23.3「式ベースのフィルター」 にあるように、波括弧に囲まれた式を使うことで条件をネスト化することができます。このスクリプトでは、式内で facility/priority-based フィルターを使用することができます。ただし、ここで property-based フィルターを使用することは推奨されません。RainerScriptは、特別関数 re_match() および re_extract() を伴う正規表現をサポートします。

    例23.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 の新しい設定形式の基礎となります。「新規設定フォーマットの使用」 を参照してください。