Wie gehen Linux-Logdateien mit der Sommerzeit um? Wenn Sie auf die Sommerzeit zurückgreifen, erhalten Sie nicht nur Werte in der falschen Reihenfolge, sondern möglicherweise auch doppelte Werte.
Ich denke, ich sollte die Systemzeit auf UTC einstellen und dann die Protokolldateien in der lokalen Zeitzone verarbeiten, bevor ich sie an einen Protokolldatei-Viewer übergebe.
Antwort1
Logdateien sind reine Textdateien und jede Zeile wird am Ende angehängt. Es kommt also bei Verwendung einer anderen Zeitzone als UTC zu keinem Datenverlust.
Natürlich können Sie die Dateien mit einem Tool anzeigen, das zu Verwirrung führen kann. Der übliche Grund für die Verwendung von UTC besteht jedoch darin, Mehrdeutigkeiten zu vermeiden: Sie müssen die lokale Zeitzone nicht kennen, um die Daten zu interpretieren.
Also ja, die Verwendung von UTC in Logdateien ist einegute Sache, Undoft gemacht, aber es gehen keine Daten in den Protokolldateien verloren, wenn Sie dies nicht tun.
Antwort2
Protokolldateien „behandeln“ keine Zeitzonen, sie zeichnen nur auf, was eine Anwendung oder ein Dienst dort geschrieben hat. Wenn eine Anwendung also „nur die Nachrichten“ und „direkt in die Protokolldatei“ schreibt, haben Sie Pech gehabt.
Einige Syslog-Server (wie syslog-ng) ermöglichen es Ihnen, die "rohen" Protokolldaten mit Zeitstempeln zu "verzieren", wobeiDuSie können zwischen UTC und der Ortszeit mit oder ohne Offset wählen.
Es stehen auch Protokollierungsprogramme zur Verfügung (z. B. Logger), die als Zwischenlösung zwischen Standardout-Protokollierung und Syslog-Diensten verwendet werden können.
Antwort3
Protokolldateien können ein Zeitformat wie ISO 8601 oder das verwandte RFC 3339 verwenden, das die lokale Zeit als Anpassung der UTC anzeigt.
Wenn die Zeiteinträge mit Z enden oder mit einem Bindestrich (8601), Minus oder Plus, gefolgt von einem Offset-Wert, werden sie in einem auf UTC basierenden Format angezeigt.
Wenn das Protokoll auf UTC basiert, wird die Sommerzeit als Änderung des Offsets angezeigt. Der Offset ermöglicht eine eindeutige Angabe von Ortszeit und Sommerzeit.
Bei nachfolgenden Einträgen kann es durch die Verstellung der Uhr noch zu zeitlichen Überschneidungen kommen.
Antwort4
Wie andere bereits erklärt haben, liegt es in der Natur von Logdateien, dass man nichtaußer BetriebEinträge, unabhängig davon, was mit den Zeitstempeln geschieht. Das Problem, das Sie sich vorstellen, istMehrdeutigkeit, wo ein schlecht gewählter Zeitstempelmechanismus keinen einzelnen Zeitpunkt eindeutig bezeichnet.
Dies macht es für den armen Systemadministrator, der die Protokolle liest, schwierig, festzustellen, wann etwas passiert ist. Im Nachhinein gibt ein Protokolleintrag, der beispielsweise nur einen Zeitstempel von hat, Apr 3 02:14:57
nicht an, ob es sich um die Ortszeit oder UTC handelt, noch (angenommen, es handelt sich um die Ortszeit und insbesondere um die australische Ostküstenzeit), ob es 02:14:57 AEST oder 02:14:57 AEDT ist.
Dies bedeutet jedoch zu Unrecht, dass es so etwas wie „Linux-Protokolldateien“ gibt. Nicht alle Protokolldateien funktionieren auf die gleiche Weise, und seit den 1980er Jahren hat man sich von dieser Art von Zeitstempeln entfernt.
Zum Beispiel: Diejenigen von uns, die Daemontools und ähnliche Programme seit vielen Jahren verwenden, habenLinux-Protokolldateiendie TAI64N-Zeitstempel verwenden. Ein Protokolleintrag sieht folgendermaßen aus:
@40000000577d024d2d10bb6d Hallo!
Die lange Folge hexadezimaler Ziffern ist ein TAI64N-Zeitstempel. Es handelt sich lediglich um eine 64-Bit-Zählung der Sekunden seit einem Zeitpunkt in der sehr weit zurückliegenden Vergangenheit (2 62 Sekunden vor dem 1. Januar 1970 00:00:00 Internationale Atomzeit), gefolgt von einer 32-Bit-Zählung der Nanosekunden.
TAI hat keine unterschiedlichen Zeitzonenvarianten. Es gibt nicht einmal wiederholte „Schaltsekunden“. Jede Sekunde hat eine eindeutige feste Zahl.
Und tatsächlich besteht die Aufgabe des Programms darin, diese Zeitstempel in eine für Menschen lesbare Ortszeit umzuwandeln tai64nlocal
:
jdebp % echo @40000000577d024d2d10bb6d Hallo zusammen\! | TZ=UTC0 tai64nlocal 06.07.2016 13:05:45.756071277 Hallo! jdebp % echo @40000000577d024d2d10bb6d Hallo zusammen\! | TZ=PST8PDT tai64nlocal 06.07.2016 06:05:45.756071277 Hallo! jdebp %
Zeitzonen und Sommerzeitänderungen haben keinen Einfluss aufMein„Linux-Protokolldateien“, und ich kann die Protokolldateien in jeder gewünschten Zeitzone lesen. (Mit der sort
Option kann ich auch Dinge wie das Zusammenführen oder Sortieren mehrerer Protokolldateien zu einer einzigen tun -m
.)