/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
시작 이후 숫자가 초와 마이크로 초를 나타내는 것으로 추측합니다.
그러나이 두 타임 스탬프 세트 (의 출력 사용)를 연관시키려는 시도 uptime
는 약 5000 초의 불일치를 나타 냈습니다.
이것은 대략 내 컴퓨터가 정지 된 시간입니다.
dmesg 및 Xorg에서 사용하는 숫자 타임 스탬프를 절대 타임 스탬프에 매핑하는 편리한 방법이 있습니까?
최신 정보
이것을 이해하기위한 예비 단계로서, 또한 내 질문을 좀 더 명확하게 하기 위해 시간 차이 를 구문 분석 하고 출력 하는 Python 스크립트 를 작성했습니다 /var/log/syslog
. ubuntu 10.10을 실행하는 내 컴퓨터에서 해당 파일에는 dmesg 타임 스탬프와 syslog 타임 스탬프가 찍혀있는 수많은 커널 시작 행이 포함되어 있습니다. 스크립트는 커널 타임 스탬프를 포함하는 해당 파일의 각 줄에 대한 줄을 출력합니다.
용법:
python syslogdriver.py /var/log/syslog | column -nts $'\t'
Expurgated 출력 (열 정의는 아래 참조) :
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
초 정밀도 만 갖는 절대 (즉, 생성 된) 타임 스탬프 로 인한 일회성 오류를 피하기 위해 이것을 수십 초로 반올림합니다 . 실제로 (올바르게 생각합니다.) 결과가 10 이하의 오류가 발생할 가능성이 적기 때문에 실제로 올바른 방법은 아닙니다. 누군가 더 나은 아이디어를 가지고 있다면 알려주세요.
또한 syslog의 날짜 형식에 대한 몇 가지 질문이 있습니다. 특히, 나는 일년이 여기에 나타나는지 궁금합니다. 나는 추측하지 않으며, 어쨌든 TFM의 정보에 도움이 될 수 있지만 누군가 알고 있다면 유용 할 것입니다. .. 물론 누군가가이 스크립트를 펄 코드의 몇 줄을 없애는 대신 미래의 어느 시점에서 사용한다고 가정합니다.
다음 것:
따라서 여러분 중 한 사람이 환영의 계시를 전하지 않는 한, 다음 단계는 주어진 커널 타임 스탬프에 대한 시간 왜곡을 얻는 함수를 추가하는 것입니다. 절대 타임 스탬프를 얻기 위해 커널 타임 스탬프와 함께 스크립트에 하나 또는 syslog 세트를 제공 할 수 있어야합니다. 그런 다음 Xorg 문제 디버깅으로 돌아갈 수 있습니다.
Freezing user space processes
수면 전에 명확하게 수행되는 값이 이미 잘못되었습니다 .
[12345.6789]..
는 커널이 방출 한 텍스트 (로 시작 )에 절대 타임 스탬프를 접두어로 사용 하므로 올바르게 작동합니다 , 내 마지막 의견으로 해결 된 문제에 따라 다릅니다. 커널이 실제로 무엇을해야하는지 잘 모르겠습니다. 시작 기준 타임 스탬프의 의미에 따라 다릅니다. 일부 상황에서는 부팅 이후 시간과 달리 실행 시간 이 의미가있을 수 있습니다. 이상적으로는 두 값 모두에 대한 신뢰할만한 기록이있을 것입니다.
sort
하며, 파이썬 스크립트에 대해, 년, 시간대 등으로 정렬 할 수 있습니다 .