時間同期された出力を取得するにはどうすればよいですか (サーバー上の異なるタイムゾーン)?

時間同期された出力を取得するにはどうすればよいですか (サーバー上の異なるタイムゾーン)?

異なるタイムゾーン (すべて異なるのではなく、多数のタイムゾーン) を持つ約 100 台のサーバーがあるとします。サーバー ログには次のような出力があります。

server1:BFE4C025   0420201413 P H sysplanar0     UNDETERMINED ERROR
server2:BFE4C025   0421032413 P H sysplanar0     UNDETERMINED ERROR

-> つまり、サーバー時間(異なるタイムゾーン)になります ->

0420201413 = 2013.04.20. 20:14
0421032413 = 2013.04.21 03:24

たとえば、0421032413 を 2013.04.21 03:24 に変換するのは簡単です。ただし、これらの 2 つのサーバーでまったく同じ時間に「date」コマンドを実行すると、サーバーの時刻が再び異なります。

server1:Tue Apr 23 07:23:24 EDT 2013
server2:Tue Apr 23 13:23:24 MESZ 2013

わかります。しかし、1 つのタイムゾーンで、上記のログ (サーバーあたり数行のみ) が必要です。なぜでしょうか。それは、自分のタイムゾーンで正確にいつ物事が起こったかを知ることが非常に役立つからです (例: CET TZ)。

質問: サーバー ログの時間を中央ヨーロッパ時間に変換するにはどうすればよいでしょうか?

答え1

既存の syslog ファイルを変換するだけの場合は、たとえば、小さな python/perl/ruby プログラムを使用してTue Apr 23 07:23:24 EDT 2013UTC (または CET) で何かを変更できます。

ログ ファイルに書き込まれる時間形式をより細かく制御したい場合は、 を参照してくださいsyslog-ng。このtsformat()機能を使用すると、時間形式を iso8601 などに設定できます。

私自身、5 つのタイムゾーンのサーバーで作業した経験があるので、UTC タイムスタンプの使用を強くお勧めします。夏時間が同時に始まらないため、CET (または CEST) が PST (またはすでに PDT) で何であるかを追跡するのは悪夢です。

答え2

date日付のタイムスタンプを印刷し、ログ メッセージとともに保存するために使用できます。

$ TZ='Europe/Warsaw' date
wto, 23 kwi 2013, 17:11:48 CEST
$ TZ='America/Los_Angeles' date
wto, 23 kwi 2013, 08:11:56 PDT
$ date --universal
wto, 23 kwi 2013, 15:13:14 UTC

tzselectタイムゾーンを見つけるために使用します。

関連情報