/var/log/messages
、/var/log/syslog
およびその他のログファイルは、などの絶対時間を含むタイムスタンプを使用しますJan 13 14:13:10
。
/var/log/Xorg.0.log
そして/var/log/dmesg
、の出力と同様に、$ dmesg
次のような形式を使用します
[50595.991610] malkovich: malkovich malkovich malkovich malkovich
数字は起動からの秒とマイクロ秒を表していると推測/収集しています。
ただし、これら2つのタイムスタンプのセットを(からの出力を使用してuptime
)相関させようとすると、約5000秒の不一致が生じました。
これはおおよそ、コンピューターが中断された時間です。
dmesgとXorgが使用する数値タイムスタンプを絶対タイムスタンプにマップする便利な方法はありますか?
更新
これを理解するための予備ステップとして、また私の質問をもう少し明確にするために、時間のずれを解析して出力するPythonスクリプトを作成しました/var/log/syslog
。私のマシンでは、ubuntu 10.10を実行しており、そのファイルにはdmesgタイムスタンプとsyslogタイムスタンプの両方がスタンプされた多数のカーネル由来の行が含まれています。スクリプトは、カーネルタイムスタンプを含むそのファイルの各行に1行を出力します。
使用法:
python syslogdriver.py /var/log/syslog | column -nts $'\t'
削除された出力(列の定義については以下を参照):
abs abs_since_boot rel_time rel_offset message
Jan 13 07:49:15 32842.1276569 32842.301498 0 malkovich malkovich
... rel_offset
は、すべての介在行に対して0です...
Jan 13 09:55:14 40401.1276569 40401.306386 0 PM: Syncing filesystems ... done.
Jan 13 09:55:14 40401.1276569 40401.347469 0 PM: Preparing system for mem sleep
Jan 13 11:23:21 45688.1276569 40402.128198 -5280 Skipping EDID probe due to cached edid
Jan 13 11:23:21 45688.1276569 40402.729152 -5280 Freezing user space processes ... (elapsed 0.03 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.760110 -5280 Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.776102 -5280 PM: Entering mem sleep
... rel_offset
は残りのすべての行で-5280です...
Jan 13 11:23:21 45688.1276569 40403.149074 -5280 ACPI: Preparing to enter system sleep state S3
Jan 13 11:23:21 45688.1276569 40403.149477 -5280 PM: Saving platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Disabling non-boot CPUs ...
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Back to C!
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 PM: Restoring platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.151034 -5280 ACPI: Waking up from system sleep state S3
...最後の行は少し下から、まだ出力の最後より上です。 それらのいくつかは、おそらくdmesg
中断が発生する前にの循環バッファに書き込まれ、syslog
その後にのみ伝播されました。これは、それらすべてが同じsyslogタイムスタンプを持つ理由を説明しています。
列の定義:
abs
syslogによって記録される時間です。
abs_since_boot
の内容/proc/uptime
との値に基づいて、システムが起動してからの秒単位の同じ時間ですtime.time()
。
rel_time
カーネルのタイムスタンプです。
rel_offset
間の差であるabs_since_boot
とrel_time
。syslog
秒単位の精度しか持たない絶対的な(つまり、生成された)タイムスタンプによる1回限りのエラーを回避するために、これを数十秒に丸めています。これは実際には正しい方法ではありません。なぜなら、実際には(私は..)10を超えるエラーが発生する可能性が小さくなるからです。誰かがより良いアイデアを持っているなら、私に知らせてください。
syslogの日付形式についても質問があります。特に、1年がその中に現れるかどうか疑問に思っています。私はノーと推測している、とにかくTFMでその情報に役立つ可能性が最も高いかもしれないが、誰かがたまたまそれが有用であることを知っていれば。..もちろん、誰かがこのスクリプトを将来のある時点で使用し、数行のPerlコードを破壊するのではないと仮定します。
次:
だから、あなたからの何らかの歓迎された啓示が私に与えられない限り、私の次のステップは、与えられたカーネルのタイムスタンプの時間のずれを取得する関数を追加することです。絶対タイムスタンプを取得するために、カーネルのタイムスタンプとともに、1つまたは一連のsyslogをスクリプトに送信できる必要があります。その後、Xorgの問題のデバッグに戻ることができますが、これは現時点では回避できます。
Freezing user space processes
スリープ前に明確に行われます。
[12345.6789]..
)に絶対タイムスタンプをプレフィックスするだけなので、それは正しく動作しています、最後のコメントで対処した問題の対象となります。ここでは、カーネルが実際に何をすべきかわかりません。それは、それらのスタートアップ相対タイムスタンプが何を示すかによって異なります。 実行時間(ブートからの時間とは対照的に)は、コンテキストによっては意味がある場合があります。理想的には、これらの値の両方の信頼できる記録があると思います。
sort
は、Pythonスクリプトで+1、年、タイムゾーンなどを使用してソートできます。