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

23.2.2. アクション

アクションは、定義済みのセレクターでフィルターされたメッセージで実行すべきことを指定します。以下にルール内で定義できるアクションをいくつか示します。

ログファイルへの syslog メッセージの保存

アクションの大半は、どのログファイルに syslog メッセージを保存するかを指定します。これは定義済みセレクターの後にファイルパスを指定することで行います。

FILTER PATH

ここでの FILTER はユーザーが指定したセレクターを表し、PATH はターゲットファイルのパスを表します。

たとえば、以下のルールは、すべての cron syslog メッセージを選択するセレクターと、それらのメッセージを /var/log/cron.log ログファイルに保存するアクションで設定されています。

cron.* /var/log/cron.log

デフォルトでは、syslog メッセージの生成時に毎回ログファイルは同期されます。同期を省略する場合は、ダッシュ記号 (-) を該当するファイルパスの接頭辞として使います。

FILTER -PATH

書き込みの直後にシステムが終了すると、情報が失われる場合があることに注意してください。ただし、この設定では、特に非常に詳細なログメッセージを生成するプログラムを実行する場合には、パフォーマンスも改善されます。

指定したファイルパスは、static または dynamic のいずれかになります。静的ファイルは、上記の例で示されているように固定ファイルパスで示されます。動的ファイルパスは、受け取ったメッセージによって異なります。動的ファイルパスは、テンプレートと疑問符 (?) の接頭辞で示されます。

FILTER ?DynamicFile

ここでは、DynamicFile は出力パスを修正する定義済みテンプレート名になります。ダッシュ記号 (-) の接頭辞を使うと同期を無効にでき、またコロン (;) 区切りで複数のテンプレートを使用できます。テンプレートに関する詳細は 「動的なファイル名の生成」 を参照してください。

指定したファイルが既存の terminal または /dev/console デバイスである場合、syslog メッセージは標準出力 (特別な terminal 処理を使用) へ送信されるか、X Window システムの使用時には使用中のコンソール (特別な /dev/console 処理を使用) へそれぞれ送信されます。

ネットワークを使用した syslog メッセージの送信

rsyslog を使用すると、ネットワークを使用して syslog メッセージを送受信できます。この機能により、1 台のマシンで複数ホストの syslog メッセージを管理できます。syslog メッセージをリモートマシンに転送するには、以下の構文を使用します。

@(zNUMBER)HOST:PORT

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

  • アットマーク (@) は、syslog メッセージが UDP プロトコルを使用してホストへ転送されることを示します。TCP プロトコルを使用するには、2 つのアットマークを空白なしで (@@) 使用します。
  • オプションの zNUMBER 設定を使用すると、syslog メッセージの zlib 圧縮が可能になります。NUMBER 属性は、圧縮レベルを指定します (最低の 1 から最高の 9 まで)。圧縮が得られたことは rsyslogd が自動的にチェックします。メッセージが圧縮されるのは圧縮が可能になった場合のみで、60 バイト未満のメッセージは圧縮されません。
  • HOST 属性は、選択した syslog メッセージを受信するホストを指定します。
  • PORT 属性は、ホストマシンのポートを指定します。

    IPv6 アドレスをホストとして指定する場合は、アドレスを角括弧 ([, ]) で囲みます。

    例23.4 ネットワークを使用した syslog メッセージの送信

    以下の例は、ネットワーク上で syslog メッセージを転送するアクションです (注記: すべてのアクションの前には、いずれかの優先度を持つすべてのメッセージを選択するセレクターが付いています)。メッセージを UDP 経由で 192.168.0.1 に転送するには、以下を入力します。

    . @192.168.0.1

    ポート 6514 と TCP プロトコルを使用してメッセージを "example.com" に転送するには、以下を使用します。

    . @@example.com:6514

    以下ではメッセージを zlib (レベル 9 圧縮) で圧縮し、UDP プロトコルを使用して 2001:db8::1 に転送します。

    . @(z9)[2001:db8::1]
出力チャンネル

出力チャンネルは主にログファイルの最大サイズを指定するために使用されます。これは、ログファイルのローテーションに非常に便利です (詳細は 「ログローテーション」 を参照してください)。出力チャンネルは基本的に出力アクションに関する情報を集めたものです。出力チャンネルは、$outchannel ディレクティブで定義されます。/etc/rsyslog.conf で出力チャンネルを定義するには、以下の構文を使用します。

$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION

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

  • NAME 属性は、出力チャンネル名を指定します。
  • FILE_NAME 属性は、出力ファイル名を指定します。出力チャンネルはファイルにのみ書き込み可能で、パイプやターミナル、その他の出力には書き込みできません。
  • MAX_SIZE 属性は、(FILE_NAME 内にある) 指定されたファイルが拡張可能な最大サイズを表します。この値は バイト 単位で指定します。
  • ACTION 属性は、MAX_SIZE で定義された最大サイズに到達した際に取るべきアクションを指定します。

    定義済みの出力チャンネルをルール内のアクションとして使用するには、以下を入力します。

    FILTER :omfile:$NAME

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

    以下の出力は、出力チャンネルを使用した簡単なログローテーションを示しています。まず、出力チャンネルは $outchannel ディレクティブにより定義されます。

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

    その後に、優先度を持つすべての syslog メッセージを選択し、取得した syslog メッセージ上の事前定義された出力チャンネルを実行するルール内で使用されます。

    . :omfile:$log_rotation

    制限 (例では 100 MB) に達すると、/home/joe/log_rotation_script が実行されます。このスクリプトには、ファイルを異なるフォルダーに移動することやその中の特別なコンテンツを編集すること、単にそれを削除することなど、様々なタスクを含めることができます。

特定ユーザーへの syslog メッセージの送信
メッセージの送信先となるユーザー名を指定することで、rsyslog は syslog メッセージを送信することができます (例23.7「複数アクションの指定」 で表示)。複数のユーザーを指定するには、各ユーザー名をコンマ (,) で区切ります。現在ログオンしている全ユーザーにメッセージを送るには、アスタリスク (*) を使用します。
プログラムの実行

rsyslog を使用すると、選択した syslog メッセージに対してプログラムを実行でき、system() 呼び出しを使用してシェルでプログラムを実行できます。実行するプログラムを指定するには、そのプログラムの前に キャレット文字 (^) を付けます。その後に、受信したメッセージをフォーマットしてそれを 1 行のパラメーターとして指定した実行ファイルに渡すテンプレートを指定します (テンプレートに関する詳細は 「テンプレート」 を参照)。

FILTER ^EXECUTABLE; TEMPLATE

ここでは、FILTER 条件の出力は EXECUTABLE で表されるプログラムで処理されます。このプログラムは、有効な実行ファイルであればどれでも構いません。TEMPLATE をフォーマットするテンプレートに置き換えます。

例23.6 プログラムの実行

以下の例では、すべての優先度の 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 メッセージを修正するテンプレートのオプション使用を指定します。テンプレートに関する詳細は 「テンプレート」 を参照してください。

    重要

    現在 rsyslog は、MySQLPostgreSQL データベースにのみ対応しています。MySQL および PostgreSQL のデータベースライター機能を使用するには、rsyslog-mysql および rsyslog-pgsql パッケージをそれぞれインストールします。また、/etc/rsyslog.conf 設定ファイルに適切なモジュールを読み込んでください。

    module(load=”ommysql”)  # Output module for MySQL support
    module(load=”ompgsql”)  # Output module for PostgreSQL support

    rsyslog モジュールの詳細は 「Rsyslog モジュールの使用」 を参照してください。

    もしくは、omlibdb モジュールが提供する汎用のデータベースインターフェイスを使用することもできます (サポート対象: Firebird/Interbase、MS SQL、Sybase、SQLLite、Ingres、Oracle、mSQL)。

syslog メッセージの破棄

選択したメッセージを破棄する場合は、stop を使用します。

破棄するアクションは、ほとんどの場合、さらに処理をする前にメッセージをフィルタリングするために使用されます。繰り返されるメッセージを省略しなければログファイルがいっぱいになってしまう場合に、これは効果的です。破棄アクションの結果は、指定された設定ファイル内の場所によって異なります。最善の結果を得るためにも、これらのアクションは、アクションリストの上に配置します。一旦破棄したメッセージを、設定ファイルの後の行で回復することはできないことに注意してください。

たとえば、以下のルールを使用すると、local5.* フィルターに一致するメッセージをすべて破棄します。

local5.* stop

以下の例では、cron syslog メッセージがすべて破棄されます。

cron.* stop
注記

rsyslog 7 より前のバージョンでは、syslog メッセージを破棄する際に、stop の代わりにチルダ文字 (~) が使用されていました。

複数アクションの指定

各セレクターで、複数のアクションを指定できます。1 つのセレクターに複数アクションを指定するには、各アクションを別々の行に書き込んでそれらの先頭にアンパサンド文字 (&) を付けます。

FILTER ACTION
& ACTION
& ACTION

指定されたセレクターが評価されるのは 1 回のみであるため、複数の動作を指定すると、希望する結果の全体的なパフォーマンスが向上します。

例23.7 複数アクションの指定

下記の例では、重大の優先度 (crit) を持つすべてのカーネル syslog メッセージはユーザー user1 に送信され、テンプレート temp によって処理されてから、test-program 実行ファイルに渡され、その後に UDP プロトコルを介して 192.168.0.1 に転送されます。

kern.=crit user1
& ^test-program;temp
& @192.168.0.1

すべてのアクションで、メッセージをフォーマットするテンプレートが後に続きます。テンプレートを指定するには、アクションの末尾にセミコロン (;) を付け、続けてテンプレートの名前を指定します。テンプレートに関する詳細は 「テンプレート」 を参照してください。

警告

テンプレートはアクションで使用される前に定義する必要があり、アクションの後に定義しても無視されます。つまり、/etc/rsyslog.conf では、テンプレート定義が常にルール定義の前にくるようにする必要があります。

23.2.3. テンプレート

rsyslog で生成された出力はすべて、テンプレート を使用して、ユーザーのニーズに応じて修正とフォーマット設定ができます。テンプレートを作成するには、/etc/rsyslog.conf に以下の構文を使用します。

template(name=”TEMPLATE_NAME” type=”string” string="text %PROPERTY% more text" [option.OPTION="on"])

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

  • template() はテンプレートを定義するディレクティブ導入ブロックです。
  • TEMPLATE_NAME の必須引数はテンプレートの参照に使用します。TEMPLATE_NAME は固有にする必要があります。
  • type の必須引数は list、subtree、string、plugin のいずれかの値を取得します。
  • string 引数は実際のテンプレートテキストです。このテキスト内では、改行文字の \n、キャリッジリターンの \r などの特殊文字を使用できます。% または " などのその他の文字を使用する場合は、それらの文字を文字どおりエスケープする必要があります。このテキスト内では、改行文字の \n、キャリッジリターンの \r などの特殊文字を使用できます。% または " などのその他の文字を使用する場合は、それらの文字を文字どおりエスケープする必要があります。
  • 2 つのパーセントマーク (%) の間にあるテキストは、syslog メッセージの特定のコンテンツにアクセスできるようにする プロパティー を指定します。プロパティーに関する詳細情報は、「プロパティー」 を参照してください。
  • OPTION 属性は、テンプレート機能を修正するオプションを指定します。現在サポートされているテンプレートオプションは、テキストを SQL クエリーとしてフォーマット作成する sqlstdsql、または JSON 処理に適した形にテキストをフォーマットする JSON です。casesensitive はプロパティー名の大文字小文字の区別を設定します。

    注記

    データベースライターは、sql オプションまたは stdsql オプションがテンプレート内で指定されているかどうかをチェックします。指定されていないと、データベースライターはアクションを実行しません。これは SQL インジェクションなどのセキュリティーの脅威を回避するためです。

    詳細は、「アクション」syslog メッセージのデータベースでの保存を参照してください。

動的なファイル名の生成

テンプレートを使用して、動的なファイル名を生成できます。プロパティーをファイルパスの一部として指定すると、それぞれ一意のプロパティーに対して新しいファイルが作成されます。これは、syslog メッセージを分類する便利な方法です。

たとえば、メッセージからタイムスタンプを抽出する timegenerated プロパティーを使用すると、各 syslog メッセージに一意のファイル名を生成できます。

  template(name=”DynamicFile” type=”list”) {
  constant(value=”/var/log/test_logs/”)
  property(name=”timegenerated”)
  constant(value”-test.log”)
}

$template ディレクティブは単にテンプレートを指定するだけです。効果を反映するためには、それをルール内で使用しなければなりません。/etc/rsyslog.conf 内のアクション定義でクエスチョンマーク (?) を使用して、動的ファイル名テンプレートをマークします。

. ?DynamicFile
プロパティー

テンプレート内 (2 つのパーセントマーク (%) の内側) で定義されたプロパティーにより、プロパティー置換関数 を使用して syslog メッセージの各種コンテンツにアクセスできるようになります。テンプレート内 (2 つの引用符 (“…") の間) でプロパティーを定義するには、以下の構文を使用します。

%PROPERTY_NAME:FROM_CHAR:TO_CHAR:OPTION%

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

  • PROPERTY_NAME 属性は、プロパティー名を指定します。利用可能なすべてのプロパティーとその詳細な説明は、man ページ rsyslog.conf(5)Available Properties セクションでご覧になれます。
  • FROM_CHAR 属性と TO_CHAR 属性は、指定したプロパティーが動作する文字の範囲を表します。他の方法では、正規表現を使用して文字の範囲を指定することもできます。これを行うには、文字 RFROM_CHAR 属性として指定し、希望する正規表現を TO_CHAR 属性として指定します。
  • OPTION 属性は、入力を小文字に変換する lowercase オプションなど、プロパティーオプションを指定します。利用可能なすべてのプロパティーオプションとその詳細な説明は、rsyslog.conf(5) の man ページの Property Options セクションでご覧になれます。

簡単なプロパティーの例を以下に示します。

  • 以下のプロパティーは、syslog メッセージのメッセージテキスト全体を取得します。

    %msg%
  • 以下のプロパティーは、syslog メッセージにあるメッセージテキストの最初の 2 文字を取得します。

    %msg:1:2%
  • 以下のプロパティーは、syslog メッセージの全メッセージテキストを取得して、最後のラインフィード文字を省きます。

    %msg:::drop-last-lf%
  • 以下のプロパティーは、syslog メッセージを受信し、RFC 3999 日付基準に従ってそれをフォーマットした時に生成されるタイムスタンプの最初の 10 文字を取得します。

    %timegenerated:1:10:date-rfc3339%
テンプレートの例

このセクションでは、rsyslog テンプレートの例をいくつか示しています。

例23.8「詳細な syslog メッセージのテンプレート」 は、syslog メッセージのフォーマットを作成するテンプレートを示しています。これにより、メッセージの重要性、機能、メッセージ受信時のタイムスタンプ、ホスト名、メッセージのタグ、メッセージテキストが出力され、改行後に終了します。

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

  template(name=”verbose” type=”list”) {
  property(name="syslogseverity”)
  property(name="syslogfacility”)
  property(name="timegenerated”)
  property(name="HOSTNAME”)
  property(name="syslogtag”)
  property(name="msg”)
  constant(value=”\n")
}

例23.9「ウォールメッセージのテンプレート」 は、従来のウォールメッセージ (ログインしていてその mesg(1) パーミッションが yes に設定されている全ユーザーに送信されるメッセージ) に似ているテンプレートを示しています。このテンプレートは改行後 (\r\n を使用) にメッセージテキストと共にホスト名、メッセージタグ、およびタイムスタンプを出力してベル (\7 を使用) を鳴らします。

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

  template(name=”wallmsg” type=”list”) {
  constant(value="\r\n\7Message from syslogd@”)
  property(name="HOSTNAME”)
  constant(value=” at ")
  property(name="timegenerated”)
  constant(value=" ...\r\n ”)
  property(name="syslogtag”)
  constant(value=” “)
  property(name="msg”)
  constant(value=”\r\n”)
}

例23.10「データベースフォーマットが設定されたメッセージのテンプレート」 は、syslog メッセージのフォーマットを作成してデータベースクエリーとして使用できるようにするテンプレートを示しています。テンプレートの末尾でテンプレートオプションとして指定されている sql オプションに注目してください。これにより、データベースライターが、メッセージを MySQL SQL クエリーのフォーマットに指定します。

例23.10 データベースフォーマットが設定されたメッセージのテンプレート

template(name="dbFormat" type="list" option.sql="on") {
constant(value="insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag)")
constant(value=" values ('")
property(name="msg")
constant(value="', ")
property(name="syslogfacility")
constant(value=", '")
property(name="hostname")
constant(value="', ")
property(name="syslogpriority")
constant(value=", '")
property(name="timereported" dateFormat="mysql")
constant(value="', '")
property(name="timegenerated" dateFormat="mysql")
constant(value="', ")
property(name="iut")
constant(value=", '")
property(name="syslogtag")
constant(value="')")
}

rsyslog には、RSYSLOG_ 接頭辞で識別される事前定義のテンプレートのセットも含まれています。これらは syslog の使用に確保されており、競合を防止するためにこの接頭辞を使用したテンプレートを作成しないことが推奨されます。以下のリストでは、これらの事前定義のテンプレートとその定義を示しています。

RSYSLOG_DebugFormat

プロパティー問題のトラブルシューティングに使われる特別なフォーマット。

template(name=”RSYSLOG_DebugFormat” type=”string” string="Debug line with all properties:\nFROMHOST: '%FROMHOST%', fromhost-ip: '%fromhost-ip%', HOSTNAME: '%HOSTNAME%', PRI: %PRI%,\nsyslogtag '%syslogtag%', programname: '%programname%', APP-NAME: '%APP-NAME%', PROCID: '%PROCID%', MSGID: '%MSGID%',\nTIMESTAMP: '%TIMESTAMP%', STRUCTURED-DATA: '%STRUCTURED-DATA%',\nmsg: '%msg%'\nescaped msg: '%msg:::drop-cc%'\nrawmsg: '%rawmsg%'\n\n")
RSYSLOG_SyslogProtocol23Format

IETF のインターネットドラフト ietf-syslog-protocol-23 で指定されるフォーマット。これは新たな syslog 標準 RFC になると想定されています。

template(name=”RSYSLOG_SyslogProtocol23Format” type=”string” string="%PRI%1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n ")
RSYSLOG_FileFormat

TraditionalFileFormat に類似した新しいスタイルのログファイルフォーマットですが、タイムスタンプとタイムゾーン情報の精度がより高くなります。

template(name="RSYSLOG_FileFormat" type="list") {
property(name="timestamp" dateFormat="rfc3339")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="syslogtag")
property(name="msg" spifno1stsp="on" )
property(name="msg" droplastlf="on" )
constant(value="\n")
}
RSYSLOG_TraditionalFileFormat

タイムスタンプの精度の低い古いスタイルのデフォルトのログファイルフォーマット。

template(name="RSYSLOG_TraditionalFileFormat" type="list") {
property(name="timestamp")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="syslogtag")
property(name="msg" spifno1stsp="on" )
property(name="msg" droplastlf="on" )
constant(value="\n")
}
RSYSLOG_ForwardFormat

高精度のタイムスタンプとタイムゾーン情報が含まれる転送フォーマット。

template(name="ForwardFormat" type="list") {
constant(value="<")
property(name="pri")
constant(value=">")
property(name="timestamp" dateFormat="rfc3339")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="syslogtag" position.from="1" position.to="32")
property(name="msg" spifno1stsp="on" )
property(name="msg")
}
RSYSLOG_TraditionalForwardFormat

精度の低いタイムスタンプを使用する従来の転送フォーマット。

template(name="TraditionalForwardFormat" type="list") {
constant(value="<")
property(name="pri")
constant(value=">")
property(name="timestamp")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="syslogtag" position.from="1" position.to="32")
property(name="msg" spifno1stsp="on" )
property(name="msg")
}

23.2.4. グローバルディレクティブ

グローバルディレクティブは、rsyslogd デーモンに適用される設定オプションです。通常、これらは rsyslogd デーモンの動作に影響を与える事前定義された特定の変数の値、または生じるルールを指定します。グローバルディレクティブはすべて、global 設定ブロックに含まれています。以下は、上書きするログメッセージのローカルホスト名を指定するグローバルディレクティブのサンプルです。

global(localHostname=”machineXY”)

/etc/rsyslog.conf 設定ファイルで複数のディレクティブを定義することもできます。1 つのディレクティブは、同じディレクティブの発生が再度検出されるまですべての設定オプションの動作に影響します。グローバルディレクティブは、アクション、キュー、デバッグの設定に使用できます。利用可能なすべての設定ディレクティブのリストは、「オンラインドキュメント」 でご覧になれます。現在、$ ベースの構文 (「新規設定フォーマットの使用」 を参照) に代わる新たな設定フォーマットが開発されています。ただし、従来のグローバルディレクティブはレガシーフォーマットとして引き続きサポートされます。

23.2.5. ログローテーション

以下に、/etc/logrotate.conf 設定ファイルのサンプルを示します。

# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# uncomment this if you want your log files compressed
compress

上記の設定ファイル内のすべての行は、すべてのログファイルに適用されるグローバルオプションを定義しています。この例では、ログファイルが週ごとにローテーションされ、ローテーションされたログファイルは 4 週間保持され、ローテーションされるログファイルはすべて gzip により .gz 形式に圧縮されます。ハッシュマーク (#) で始まる行はすべてコメントで、これは処理されません。

特定のログファイル用に設定オプションを定義して、それをグローバルオプションの下に置くこともできます。ただし、/etc/logrotate.d/ ディレクトリーに、特定ログファイル用の個別の設定ファイルを作成し、そこに設定オプションを定義することが推奨されます。

/etc/logrotate.d/ ディレクトリーに、設定ファイルが保存されている例を以下に示します。

/var/log/messages {
  rotate 5
  weekly
  postrotate
  /usr/bin/killall -HUP syslogd
  endscript
}

このファイル内の設定オプションは、/var/log/messages ログファイル専用の特有なものです。ここで指定された設定は、可能な場合はグローバルオプションを上書きします。そのため、ローテートされた /var/log/messages ログファイルは、グローバルオプションで定義された 4 週間ではなく、5 週間保管されます。

以下は、logrotate 設定ファイル内で指定できるディレクティブのリストです。

  • weekly: ログファイルの週ごとのローテーションを指定します。同様なディレクティブには以下のものがあります。

    • daily
    • monthly
    • yearly
  • compress: ローテートしたログファイルの圧縮を有効にします。同様なディレクティブには以下のものがあります。

    • nocompress
    • compresscmd: 圧縮に使用するコマンドを指定します。
    • uncompresscmd
    • compressext: 圧縮に使用する拡張子を指定します。
    • compressoptions: 使用される圧縮プログラムに渡すオプションを指定します。
    • delaycompress: ログファイルの圧縮を次回のログファイルのローテーションまで延期します。
  • rotate INTEGER: ログファイルが削除される、または特定のアドレスに送信されるまでにログファイルがローテーションされる回数を指定します。値 0 が指定されると、古いログファイルはローテーションではなく削除されます。
  • mail ADDRESS: このオプションは、rotate ディレクティブで定義された数だけローテーションされたログファイルを特定のアドレスへメール送信できるようにします。同様なディレクティブには以下のものがあります。

    • nomail
    • mailfirst: 間もなく期限切れになるログファイルではなく、ローテートされたばかりのログファイルがメール送信されるよう指定します。
    • maillast: 交代されたばかりのログファイルではなく、間もなく期限切れになるログファイルがメール送信されるよう指定します。mail が有効の場合は、これがデフォルトのオプションです。

ディレクティブおよび設定オプションのリストは、man ページ logrotate(5) を参照してください。

23.2.6. オープンファイルの制限の増加

特定の状況では、rsyslog がオープンファイルの最大数の制限を超えています。したがって、rsyslog は新しいファイルを開くことができません。

rsyslog でオープンファイルの制限を増やすには、以下を行います。

/etc/systemd/system/rsylog.service.d/increase_nofile_limit.conf ファイルを作成し、以下の内容を追加します。

[Service]
LimitNOFILE=16384