RSyslogのログフォーマットを調整した

rsyslogのログフォーマットを調整する。

したいこと

ログ行頭をJun 1のような%b %eによる表現から、13/04/2023のようなDD/MM/YYYYの表現に変更したい。デフォルトで西暦が表示されてないのは結構違和感がある。

テンプレートを使う

下のようなconfファイルでログフォーマットを調整というかカスタムすることができる:

# ログの格納パスの指定は適当
$template MyLogPathTemplate, "/var/log/example/%programname%.log"

# 今回のメイン。ログフォーマットをテンプレートにする。
$template MyMsgTemplate, "%$day%/%$month%/%$year% %timegenerated:12:19:date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n"

*.* -?MyLogPathTemplate;MyMsgTemplate

真ん中の行がログフォーマットをカスタムしているところ。ログ行頭の%b %eつまり、Jun 1のような表現から、目的のDD/MM/YYYYに変更している。%b%eについては以下のman strftimeを参考になる:

https://linuxjm.osdn.jp/html/LDP_man-pages/man3/strftime.3.html

%timegeneratedの部分は、RFC3339の形式の文字列12文字目から19文字目までを抜き出す構文を使っている。この辺りについてはドキュメントの以下の辺りに載っている:

RSyslog Documentation - rsyslog

-?やテンプレートに関してはこちらに載っている:

RSyslog Documentation - rsyslog

モダンな形式

これから書くならモダンな書き方をした方がいいかもしれない。if文とも親和性が高い。下はその例:

$template MyLogPathTemplate, "/var/log/example/%programname%.log"

$template MyMsgTemplate, "%$day%/%$month%/%$year% %timegenerated:12:19:date-rfc3339% %HOSTNAME% %syslogtag% %msg%\n"

# 何か条件付きでactionを実行する。
if (some_condition) then {
    # ファイルへの書き込みアクション。omfileモジュールを利用
    action(type="omfile" Template="MyMsgTemplate" dynaFile="MyLogPathTemplate")

    # action後はこのメッセージは不要なので捨てる(ケースによる)
    stop
}

アクションについてはこちらのドキュメントを参考にする:

RSyslog Documentation - rsyslog

templateの利用についてはomfileモジュールのドキュメント参考にする。大文字小文字は区別しなさそう:

RSyslog Documentation - rsyslog

stopについてはこちらのドキュメントでページ内検索をかける:

RSyslog Documentation - rsyslog

おわり

若干rsyslogのドキュメントのなかは探しづらいなと思う。少し散らかった記述になってしまったが、書き残すことは大事なのでよし。

以上です。

タイトルとURLをコピーしました