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
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
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.