/var/log/messages
、/var/log/syslog
他のいくつかのログファイルは絶対時間を含むタイムスタンプを使用しますJan 13 14:13:10
。
/var/log/Xorg.0.log
sum および/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
システムログに記録された時間。
abs_since_boot
は、その内容/proc/uptime
と値に基づいてシステムが起動してからの同じ秒数ですtime.time()
。
rel_time
カーネルタイムスタンプです。
rel_offset
abs_since_boot
との違いですrel_time
。syslog
2番目の精度のみを持つ絶対(つまり生成された)タイムスタンプによって引き起こされる1回のエラーを防ぐために、これを数十秒に丸めました。これは実際に正しいアプローチではありません。なぜなら(私の考えでは…)エラーの可能性が10倍だけ小さくなるからです。誰もがより良いアイデアを持っている場合はお知らせください。
また、syslogの日付形式に関するいくつかの質問があります。特に年が表示されるかどうか知りたいです。私の考えではそうではないようです。とにかくTFMでこの情報を見つけることができますが、誰かがこの情報を知っていれば便利です。 ..もちろん、誰かがPerlコードの数行を削除するのではなく、将来のある時点でこのスクリプトを使用しているとします。
次:
したがって、誰かが私に歓迎することを知らない限り、次のステップは、与えられたカーネルタイムスタンプの時間オフセットを取得する関数を追加することです。絶対タイムスタンプを取得するには、カーネルタイムスタンプとともに、syslogまたはsyslogセットをスクリプトに提供できる必要があります。その後、まだ解決していないXorgの問題を引き続きデバッグできます。
ベストアンサー1
興味深い質問です。私がこれを試したかどうかはわかりません。しかし、私はタイムスタンプについてあなたが言ったことに気づき、私はそれが起動後の秒数であると常に信じていました。
私のサーバーのsyslogには次のものがあります。
Jan 10 19:58:55 wdgitial kernel: [ 0.000000] Initializing cgroup subsys cpuset
Jan 10 19:58:55 wdgitial kernel: [ 0.000000] Initializing cgroup subsys cpu
Jan 10 19:58:55 wdgitial kernel: [ 0.000000] Linux version 2.6.32-21-server (buildd@yellow) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 (Ubuntu 2.6.32-21.32-server 2.6.32.11+drm33.2)
Jan 10 19:58:55 wdgitial kernel: [ 0.000000] Command line: root=/dev/xvda1 ro quiet splash
私はこれがカーネルが吐き出すので、ほとんどのLinuxディストリビューションではかなり一貫していると思います。
ここに日付とタイムスタンプがあります。