SSブログ

rsyslogのタイムスタンプのフォーマット変更 [Linux]

rsyslog のデフォルト設定では、タイムスタンプに年が出力されない。
不便を感じることが度々あるため、年(西暦 4桁)が出力されるように設定の変更を行った。

[ソフトウェアのバージョン]
・rsyslog 8.1901.0-1 (on Debian 10)
・rsyslog-8.24.0-52.el7_8.2.x86_64 (on CentOS 7)

1. 対応方法


/etc/rsyslog.conf にテンプレートの定義を追加し、これを使用する。
尚、タイムスタンプは、下記のように変更する。

(変更前)
Jan  2 11:22:33
(変更後)
2020-01-02 11:22:33

2. 実施手順


(1) テンプレートの定義


下記のテンプレートを定義する(注1)。

$template custom_timestamp,"%timestamp::10:date-rfc3339%
 %timestamp:12:19:date-rfc3339% %hostname% %syslogtag%
%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"


・%msg:::drop-last-lf%
 メッセージの最初の文字がスペースでない場合に、スペースを返す。
・%msg:::sp-if-no-1st-sp%
 メッセージを取得し、最後の改行を取り除く。


(2) デフォルト・テンプレートの変更

(変更前)
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
(変更後)
$ActionFileDefaultTemplate custom_timestamp


(3) rsyslog の再起動

# systemctl restart rsyslog

3. 備考


(1) $ActionFileDefaultTemplate の代表的な設定値


(a) RSYSLOG_TraditionalFileFormat


・デフォルトの設定値である。
・タイプスタンプに年が含まれない。
 (例) Jan 2 11:22:33
・フォーマットは、下記の通り(注1)。

"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%
%msg:::drop-last-lf%\n"


(b) RSYSLOG_FileFormat


・高精度のタイプスタンプとタイムゾーン情報が含まれる。
 (例) 2020-01-02T11:22:33.123456+09:00
・フォーマットは、下記の通り(注1)。

"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%
%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"

(注1)
複数行として表示しているが、設定は一行で行う(単純に行を連結する)こと。

nice!(0)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。