web-dev-qa-db-fra.com

Modèle de date / heure de modèle rsyslog avec secondes

Ma configuration de modèle actuelle de rsyslog ressemble à ceci:

/ 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

Malheureusement, sans aucune raison, il n’ya pas de variable pour les secondes.

Question: Comment puis-je passer au format de date/heure suivant?

2018-08-09 20:12:58

2
tenjohn

Les variables $year, $day, ... $minute font référence à la durée actuelle. Vous voulez plutôt l'horodatage lorsque l'événement était généré ou rapporté (voir ici pour la différence). Les propriétés timegenerated et timereported (== timestamp) permettent un traitement ultérieur (c.-à-d. Que vous pouvez sélectionner certains champs dans ces propriétés). Vous ne pouvez pas choisir les secondes à partir de l'heure actuelle mais uniquement à partir des deux horodatages mentionnés ci-dessus. Alors:

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, c'est une très longue ligne et au lieu de définir le modèle en tant que chaîne, vous pouvez également le définir en tant que liste. Le comportement est le même, mais la définition est différente et permet les retardations et les commentaires entre les deux. Peut-être que cela améliore la lisibilité:

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

Quand je mets ce qui précède dans /etc/rsyslog.d/so.conf puis systemctl restart syslog.service et finalement émettre

logger -t smbd_audit "Hello, $RANDOM"

alors le fichier /var/log/so-test.log contient:

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

Selon les documents rsyslog :

Le texte entre les signes de pourcentage ('%') est interprété par le substitut de propriété rsyslog.

et les documents de remplacement de propriété disent:

date-seconde

juste la deuxième partie (2 chiffres) d'un horodatage

Vous devriez donc pouvoir insérer %second% ou %date-second% dans votre modèle pour répertorier les secondes.

1
tudor