Rsyslogの現在のテンプレート構成は次のようになります。
/ etc/rsyslog.d/00-samba-audit.conf
template(name="sambalog" type="string"
string="%$year%-%$month%-%$day% %$hour%:%$minute% %HOSTNAME% %app-name% %msg%\n")
if $programname == 'smbd_audit' then /var/log/samba/log.audit;sambalog
残念ながら、秒の変数はありません。
質問:日付/時刻形式を次のようにするにはどうすればよいですか?
2018-08-09 20:12:58
変数$year
、$day
、... $minute
は、current時間を参照します。むしろ、イベントがgeneratedまたはreportedであったときのタイムスタンプが必要です(参照 ここ 違い)。プロパティtimegenerated
およびtimereported
(== timestamp
)は、さらなる処理を可能にします(つまり、これらのプロパティから特定のフィールドを選択できます)。 current時間から秒を選択することはできませんが、上記の2つのタイムスタンプからのみ選択できます。そう:
template(name="sambalog" type="string"
string="%timereported:::date-year%-%timereported:::date-month%-%timereported:::date-day% %timereported:::date-hour%:%timereported:::date-minute%:%timereported:::date-second% %HOSTNAME% %app-name% %msg%\n")
おっと、これは非常に長い行であり、テンプレートをstringとして定義する代わりに、list動作は同じですが、定義が異なるだけで、間にラインブレーキとコメントを追加できます。多分それは読みやすさを改善します:
template(name="sambalog_list" type="list") {
property(name="timereported" dateFormat="year")
constant(value="-")
property(name="timereported" dateFormat="month")
constant(value="-")
property(name="timereported" dateFormat="day")
constant(value=" ")
property(name="timereported" dateFormat="hour")
constant(value=":")
property(name="timereported" dateFormat="minute")
constant(value=":")
property(name="timereported" dateFormat="second")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="app-name")
property(name="msg" spifno1stsp="on" ) # add space if $msg doesn't start with one
property(name="msg" droplastlf="on" ) # remove trailing \n from $msg if there is one
constant(value="\n")
}
if $programname == 'smbd_audit' then /var/log/so-test.log;sambalog_list
上記を/etc/rsyslog.d/so.conf
に入れてからsystemctl restart syslog.service
に入れて、最終的に発行するとき
logger -t smbd_audit "Hello, $RANDOM"
ファイル/var/log/so-test.log
には以下が含まれます。
2018-10-12 22:14:12 myhost smbd_audit Hello, 15793
rsyslog docs によると:
パーセント記号(「%」)の間のテキストは、rsyslogプロパティの置き換えによって解釈されます。
そして property replacer docs say:
日付-秒
タイムスタンプの2番目の部分(2桁)
そのため、%second%
または%date-second%
をテンプレートに入力して、秒をリストできるようにする必要があります。