web-dev-qa-db-ja.com

秒を含むrsyslogテンプレートの日付/時刻形式

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

2
tenjohn

変数$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
2
PerlDuck

rsyslog docs によると:

パーセント記号(「%」)の間のテキストは、rsyslogプロパティの置き換えによって解釈されます。

そして property replacer docs say:

日付-秒

タイムスタンプの2番目の部分(2桁)

そのため、%second%または%date-second%をテンプレートに入力して、秒をリストできるようにする必要があります。

1
tudor