NB: Il post riguarda il solo formato della data-ora nei log e non dell’intero template. Per semplicità gli esempi seguenti non includono FACILITY/PRIORITY/LEVEL.
Il nuovo modello di interoperabilità prevede che le date utilizzate nei log seguano il formato RFC5424 con timezone in UTC.
Ove non pregiudichi l’operatività dei software, sui sistemi linux è possibile configurare la timezone con il comando
timedatectl set-timezone UTC
Attenzione: gli applicativi non dovrebbero fare affidamento sulla timezone di sistema. Questo perché gli utenti potrebbero risiedere in una timezone differente da quella delle macchine e/o perché l’applicativo potrebbe risiedere su datacenter posti in timezone differenti.
Per default, le nuove versioni di rsyslog
utilizzano il formato RFC5424 con timezone (eg. “+02:00”).
Per ottenere il formato seguente, basta commentare in /etc/rsyslog.conf
# vi /etc/rsyslog.conf
# Use traditiona (not current default) timestamp format
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
e riavviare il servizio, ottenendoo
2018-08-13T14:57:04.321507+00:00 kong-api systemd[1]: Started System Logging Service.
2018-08-13T14:57:04.321707+00:00 kong-api rsyslogd: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd. [v8.37.0]
Rsyslog >=8.18 può convertire la timezone in UTC anche su macchine con timezone differente. Basta definire un nuovo log template col parametro date.inUTC="on"
.
# Define the new `template_1` automatically converted in UTC.
# The ending "+00:00" can be stripped of with `position.to` which prints only the first 26 chars.
template(name="template_1" type="list") {
property(name="timereported" dateFormat="rfc3339" date.inUTC="on" position.to="26")
constant(value="Z ")
property(name="msg")
constant(value="\n")
}
$ActionFileDefaultTemplate template_1
ottenendo stavolta
2018-08-13T14:57:04.321507Z kong-api systemd[1]: Started System Logging Service.
2018-08-13T14:57:04.321707Z kong-api rsyslogd: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd. [v8.37.0]
Per loggare correttamente su wildfly, possiamo modificare la configurazione tramite
la CLI interattiva ed inviare i log al nostro syslog, che si occuperà di tracciarli nel formato richiesto.
$ ./wildfly/bin/jboss-cli.sh --controller=172.17.0.3:9990 -c
e spedire i log ad rsyslog usando un syslog-handler.
# Creiamo un nuovo syslog-handler
[standalone@172.17.0.3:9990 /] /subsystem=logging/syslog-handler=rfc5424:add
{"outcome" => "success"}
# Indichiamo il server syslog di riferimento
[standalone@172.17.0.3:9990 /] /subsystem=logging/syslog-handler=rfc5424:write-attribute(name=server-address, value=172.17.0.4)
{"outcome" => "success"}
# verifichiamo il contenuto della risorsa. Il formato RFC5424 è quello già impostato
# da Wildfly
/subsystem=logging/syslog-handler=rfc5424:read-resource
{
"outcome" => "success",
"result" => {
"app-name" => undefined,
"enabled" => true,
"facility" => "user-level",
"hostname" => undefined,
"level" => "ALL",
"port" => 514,
"server-address" => "172.17.0.4",
"syslog-format" => "RFC5424"
}
}
# A questo punto aggiungiamo l'handler al root-logger
[standalone@172.17.0.3:9990 /] /subsystem=logging/root-logger=ROOT:add-handler(name="rfc5424")
{"outcome" => "success"}
# E verifichiamo la configurazione risultante
[standalone@172.17.0.3:9990 /] /subsystem=logging/root-logger=ROOT:read-resource
{
"outcome" => "success",
"result" => {
"filter" => undefined,
"filter-spec" => undefined,
"handlers" => [
"CONSOLE",
"FILE",
"rfc5424"
],
"level" => "INFO"
}
}