Red Hat Training

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

25.3.3. テンプレート

rsyslog で生成される出力はすべて、テンプレート を使用して、ニーズに合わせて変更およびフォーマットできます。テンプレートを作成するには、/etc/rsyslog.conf で以下の構文を使用します。
$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]
ここでは、以下のようになります。
  • $template は、その後のテキストを示すテンプレートディレクティブで、テンプレートを定義します。
  • TEMPLATE_NAME テンプレートの名前です。この名前は、テンプレートを参照します。
  • 2 つの引用符(「…)の間はすべて実際のテンプレートテキストです。このテキスト内では、改行文字の \n、キャリッジリターンの \r などの特殊文字を使用できます。% または " などのその他の文字を使用する場合は、それらの文字を文字どおりエスケープする必要があります。
  • 2 つのパーセントマーク(%)の間にあるテキストは、syslog メッセージの特定のコンテンツにアクセスできるようにする プロパティー を指定します。プロパティーに関する詳細情報は、「プロパティー」 を参照してください。
  • OPTION 属性は、テンプレート機能を修正するオプションを指定します。現在サポートされているテンプレートオプションは、テキストを SQL クエリーとしてフォーマットするのに使用される sql および stdsql です。
    sql オプションおよび stdsql オプション
    データベースライターは、sql オプションまたは stdsql オプションがテンプレートで指定されているかどうかをチェックします。指定されていないと、データベースライターはアクションを実行しません。これは SQL インジェクションなどのセキュリティーの脅威を回避するためです。
    詳細は、『 「アクション」 の「syslog メッセージのデータベースで』 の保存」を参照してください。

動的なファイル名の生成

テンプレートを使用して、動的なファイル名を生成できます。プロパティーをファイルパスの一部として指定すると、それぞれ一意のプロパティーに対して新しいファイルが作成されます。これは、syslog メッセージを分類する便利な方法です。
たとえば、メッセージからタイムスタンプを抽出する timegenerated プロパティーを使用して、各 syslog メッセージに一意のファイル名を生成します。
$template DynamicFile,"/var/log/test_logs/%timegenerated%-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 オプションなどのプロパティーオプションを指定します。利用可能なすべてのプロパティーオプションとその詳細な説明は、man ページの rsyslog.conf(5)Property Options セクションでご覧になれます。
簡単なプロパティーの例を以下に示します。
  • 以下のプロパティーは、syslog メッセージのメッセージテキスト全体を取得します。
    %msg%
  • 以下のプロパティは、syslog メッセージにあるメッセージテキストの最初の 2 文字を取得します。
    %msg:1:2%
  • 以下のプロパティは、syslog メッセージの全メッセージテキストを取得して、最後のラインフィード文字を省きます。
    %msg:::drop-last-lf%
  • 以下のプロパティーは、syslog メッセージの受信時に生成されるタイムスタンプの最初の 10 文字を取得し、RFC 3999 日付標準に従ってフォーマットします。
    %timegenerated:1:10:date-rfc3339%

テンプレートの例

このセクションでは、rsyslog テンプレートの例をいくつか紹介します。
例25.8「詳細な syslog メッセージのテンプレート」 は、syslog メッセージをフォーマットし、メッセージの重大度、ファシリティー、メッセージの受信時のタイムスタンプ、ホスト名、メッセージタグ、メッセージテキストを出力し、改行で終了するようにテンプレートを示しています。

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

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

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

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

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

$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_ 接頭辞で識別される事前定義のテンプレートのセットも含まれています。これらは syslog の使用用に予約されており、競合を回避するためにこの接頭辞を使用してテンプレートを作成しないことが推奨されます。以下の一覧では、これらの事前定義のテンプレートとその定義を示しています。
RSYSLOG_DebugFormat
プロパティー問題のトラブルシューティングに使われる特別なフォーマット。
"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 になると想定されています。
"%PRI%1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n\"
RSYSLOG_FileFormat
TraditionalFileFormat に類似した新しいスタイルのログファイルフォーマットですが、タイムスタンプとタイムゾーン情報の精度がより高くなります。
"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
RSYSLOG_TraditionalFileFormat
タイムスタンプの精度の低い古いスタイルのデフォルトのログファイルフォーマット。
"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"
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%\"