Datums- / Uhrzeitformat der rsyslog-Vorlage mit Sekunden

3

Meine aktuelle Vorlagenkonfiguration von rsyslog sieht folgendermaßen aus:

/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

Leider gibt es für die Sekunden ohne Grund keine Variable.

Frage: Wie kann ich das Datums- / Uhrzeitformat auf das nächste einstellen?

2018-08-09 20:12:58

Tenjohn
quelle

Antworten:

2

Die Variablen $year, $day... $minutebeziehen sich auf die aktuelle Zeit. Sie möchten lieber den Zeitstempel, zu dem das Ereignis generiert oder gemeldet wurde (siehe hier für den Unterschied). Die Eigenschaften timegeneratedund timereported(== timestamp) ermöglichen eine weitere Verarbeitung (dh Sie können bestimmte Felder aus diesen Eigenschaften auswählen). Sie können die Sekunden nicht von der aktuellen Zeit auswählen, sondern nur von den beiden oben genannten Zeitstempeln. Damit:

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")

Whoa, das ist eine sehr lange Zeile, und anstatt die Vorlage als Zeichenfolge zu definieren, können Sie sie auch als Liste definieren . Das Verhalten ist das gleiche, nur die Definition ist unterschiedlich und erlaubt Zeilenumbrüche und Kommentare dazwischen. Vielleicht verbessert das die Lesbarkeit:

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

Wenn ich das oben in /etc/rsyslog.d/so.confund dann stelle systemctl restart syslog.serviceund irgendwann ausstelle

logger -t smbd_audit "Hello, $RANDOM"

dann /var/log/so-test.logenthält die Datei :

2018-10-12 22:14:12 myhost smbd_audit Hello, 15793
PerlDuck
quelle
1

Laut den rsyslog-Dokumenten :

Der Text zwischen Prozentzeichen ('%') wird vom Eigenschaftsersetzer rsyslog interpretiert.

und die Eigenschaftsersetzungsdokumente sagen:

Datum-Sekunde

Nur der zweite Teil (zweistellig) eines Zeitstempels

Sie sollten also in der Lage sein, in %second%oder %date-second%in Ihre Vorlage einzufügen, um die Sekunden aufzulisten.

Tudor
quelle
Kein Glück: "Ungültige Eigenschaft 'Sekunde' [v8.32.0 versuchen rsyslog.com/e/2207 ]"
Tenjohn
1
Ich nehme an, Sie haben "Date-Second" versucht?
Tudor
0

Ich habe das mit gemacht

%timegenerated:::date-pgsql%

Ergebnis sieht aus wie 2019-09-05 12:22:46.

Noumenon
quelle