/var/log/messages
, /var/log/syslog
và một số tệp nhật ký khác sử dụng dấu thời gian chứa thời gian tuyệt đối, như Jan 13 14:13:10
.
/var/log/Xorg.0.log
và /var/log/dmesg
, cũng như đầu ra của $ dmesg
, sử dụng một định dạng trông giống như
[50595.991610] malkovich: malkovich malkovich malkovich malkovich
Tôi đoán / thu thập rằng các con số biểu thị giây và micro giây kể từ khi khởi động.
Tuy nhiên, nỗ lực của tôi để tương quan hai bộ dấu thời gian này (sử dụng đầu ra từ uptime
) đã cho sự khác biệt khoảng 5000 giây.
Đây là khoảng thời gian máy tính của tôi bị đình chỉ.
Có cách nào thuận tiện để ánh xạ các dấu thời gian số được dmesg và Xorg sử dụng thành dấu thời gian tuyệt đối không?
cập nhật
Là bước đầu tiên để tìm hiểu điều này và cũng hy vọng làm cho câu hỏi của tôi rõ ràng hơn một chút, tôi đã viết một kịch bản Python để phân tích cú pháp /var/log/syslog
và đưa ra thời gian sai lệch. Trên máy của tôi, chạy Ubuntu 10.10, tệp đó chứa nhiều dòng có nguồn gốc kernel được đóng dấu cả dấu thời gian dmesg và dấu thời gian syslog. Kịch bản đầu ra một dòng cho mỗi dòng trong tệp có chứa dấu thời gian kernel.
Sử dụng:
python syslogdriver.py /var/log/syslog | column -nts $'\t'
Đầu ra hết hạn (xem bên dưới để biết định nghĩa cột):
abs abs_since_boot rel_time rel_offset message
Jan 13 07:49:15 32842.1276569 32842.301498 0 malkovich malkovich
... rel_offset
là 0 cho tất cả các dòng can thiệp ...
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
là -5280 cho tất cả các dòng còn lại ...
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
... Các dòng cuối cùng là từ một chút nữa xuống, vẫn cao hơn cuối đầu ra. Một số trong số chúng có lẽ đã được ghi vào dmesg
bộ đệm tròn trước khi đình chỉ xảy ra, và chỉ được tuyên truyền syslog
sau đó. Điều này giải thích tại sao tất cả chúng đều có cùng dấu thời gian syslog.
Định nghĩa cột:
abs
là thời gian đăng nhập bởi syslog.
abs_since_boot
là cùng thời gian tính bằng giây kể từ khi khởi động hệ thống, dựa trên nội dung /proc/uptime
và giá trị của time.time()
.
rel_time
là dấu thời gian kernel.
rel_offset
là sự khác biệt giữa abs_since_boot
và rel_time
. Tôi làm tròn số này đến hàng chục giây để tránh các lỗi một lần do các syslog
dấu thời gian tuyệt đối (nghĩa là được tạo ra ) chỉ có độ chính xác giây. Đó thực sự không phải là cách đúng đắn để làm điều đó, vì nó thực sự (tôi nghĩ ..) chỉ dẫn đến một cơ hội nhỏ hơn có lỗi ngoài 10. Nếu ai đó có một ý tưởng tốt hơn, xin vui lòng cho tôi biết.
Tôi cũng có một số câu hỏi về định dạng ngày của syslog; đặc biệt, tôi tự hỏi nếu một năm bao giờ xuất hiện trong đó. Tôi đoán là không, và trong mọi trường hợp rất có thể giúp bản thân tôi biết thông tin đó trong TFM, nhưng nếu ai đó tình cờ biết nó sẽ hữu ích. Tất nhiên, có một người nào đó sử dụng tập lệnh này vào một thời điểm nào đó trong tương lai, thay vì chỉ sử dụng một vài dòng mã Perl.
Kế tiếp:
Vì vậy, trừ khi một số tiết lộ chào mừng là do một trong các Bạn đưa ra, bước tiếp theo của tôi sẽ là thêm một hàm để có được độ lệch thời gian cho dấu thời gian kernel đã cho. Tôi có thể cung cấp tập lệnh một hoặc một tập các nhật ký hệ thống, cùng với dấu thời gian kernel, để có được dấu thời gian tuyệt đối. Sau đó, tôi có thể quay lại để gỡ lỗi các vấn đề Xorg của mình, hiện đang thoát khỏi tôi.
Freezing user space processes
mà được thực hiện rõ ràng trước khi ngủ.
[12345.6789]..
) được phát ra bởi kernel, vì vậy nó đang làm mọi thứ chính xác , tùy thuộc vào các vấn đề được giải quyết bởi bình luận cuối cùng của tôi. Tôi không chắc hạt nhân thực sự nên làm gì ở đây; nó phụ thuộc vào những dấu thời gian liên quan đến khởi động có nghĩa là gì. Thời gian chạy (trái ngược với thời gian kể từ khi khởi động) có thể có ý nghĩa trong một số bối cảnh. Tôi đoán lý tưởng sẽ có một hồ sơ đáng tin cậy về cả hai giá trị đó.
sort
, có năm, múi giờ, v.v. +1 cho tập lệnh python.