2015年2月7日土曜日

rsyslog プロパティを操作する


今回は、rsyslogでテンプレートを定義する時に利用するプロパティについてです。
※評価は、CentOS6.6(x86_64) + rsyslog-8.7.0で行っています



利用できるプロパティには、hostnameやfromhostなどがあり、
 (参考)http://www.rsyslog.com/doc/v8-stable/configuration/properties.html

プロパティの書式は以下のようになっていています。
 (参考)http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html
%property:fromChar:toChar:options%

通常は、propertyの部分だけを利用することが多いと思いますが、他の部分を操作することにより、ログの出力を色々と変化させる事ができます。

以下、2例ほどピックアップしてみます。


1.自動的に作成されるディレクトリを大文字とする

例えば、/var/log/<ホスト名>/<日付>.logのようにログを出力する際、ホスト名で作成されるディレクトリ部分を大文字にするには以下のようにuppercaseオプションを付与します。

$template   DEFAULT,  "/var/log/%FROMHOST:::uppercase%/$YEAR%%$MONTH%%$DAY%.log"
※逆に小文字にしたい場合は、lowercaseオプションを付与します


2.ログの必要な箇所だけ抽出する

fromCharとtoCharを指定すれば、シスログのどこからどこまでを抽出するかといった事が指定できます。
例えば、冗長な部分をカットした上で、RFC3339フォーマットっぽくログを出力させたい場合、

 (もともとの出力)
 2015-02-07T23:23:11.485286+09:00 rsyslog crond[10005]: (CRON) INFO (@reboot ・・・

 (冗長な部分をカットした出力)
 2015-02-07 23:23:11 rsyslog crond[10005]: (CRON) INFO (@reboot ・・・

以下のようなテンプレートを作成します(改行されてますが、1行で記述します)。
→先頭から10文字目までと、先頭から数えて12文字目から19文字目までを指定
$template RFC3339like, "%timestamp::10:date-rfc3339% %timestamp:12:19:date-rfc3339% %hostname% %syslogtag%%msg%\n"