Saya mencoba memahami stempel waktu dmesg dan merasa sulit untuk mengubahnya menjadi tanggal java / format tanggal kustom.
bantuan apa pun sangat dihargai.
Contoh log dmesg:
[14614.647880] airo(eth1): link lost (missed beacons)
Terima kasih!
Memahami dmesg
stempel waktu cukup sederhana: ini adalah waktu dalam hitungan detik sejak kernel dimulai. Jadi, saat memulai ( uptime
), Anda dapat menambahkan detik dan menampilkannya dalam format apa pun yang Anda suka.
Atau lebih baik, Anda dapat menggunakan -T
opsi baris perintah dmesg
dan mengurai format yang dapat dibaca manusia.
Dari halaman manual :
-T, --ctime
Print human readable timestamps. The timestamp could be inaccurate!
The time source used for the logs is not updated after system SUSPEND/RESUME.
dmesg
dariutil-linux 2.20.1
bawah Ubuntu 13.04)rpm -qf /bin/dmesg => util-linux-2.13-0.56.0.2.el5
util-linux 2.20
, menurut Catatan Rilis: ftp.kernel.org/pub/linux/utils/util-linux/v2.20/…Dengan bantuan jawaban dr , saya menulis solusi yang membuat konversi menjadi .bashrc Anda. Ini tidak akan merusak apa pun jika Anda tidak memiliki stempel waktu atau stempel waktu yang sudah benar.
Juga, bacaan yang baik tentang logika konversi stempel waktu dmesg & cara mengaktifkan stempel waktu jika tidak ada: https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk92677
sumber
local dmesg_bin=$(type -a dmesg | awk 'END { print $NF }')
type
lebihwhich
, lihat pertanyaan ini . Saya mengedit jawaban saya untuk menghindari pipa tripel yang tidak berguna.Untuk sistem tanpa "dmesg -T" seperti RHEL / CentOS 6, saya menyukai fungsi "dmesg_with_human_timestamps" yang disediakan oleh lucas-cimon sebelumnya. Ini memiliki sedikit masalah dengan beberapa kotak kami dengan waktu aktif yang besar. Ternyata cap waktu kernel di dmesg berasal dari nilai waktu aktif yang disimpan oleh masing-masing CPU. Seiring waktu, ini tidak sinkron dengan jam waktu nyata. Hasilnya, konversi paling akurat untuk entri dmesg terbaru akan didasarkan pada jam CPU daripada / proc / uptime. Misalnya, pada kotak CentOS 6.6 di sini:
Penghitungan waktu aktif CPU dalam milidetik, ada offset hampir 5 1/2 jam di sini. Jadi saya merevisi skrip dan mengubahnya menjadi bash asli dalam proses:
sumber
Jadi KevZero meminta solusi yang tidak terlalu rumit , jadi saya datang dengan yang berikut:
Berikut contohnya:
Jika Anda ingin kinerjanya sedikit lebih baik, letakkan stempel waktu dari proc ke dalam variabel :)
sumber
Di versi terbaru dmesg, Anda bisa menelepon
dmesg -T
.sumber
Jika Anda tidak memiliki
-T
opsidmesg
seperti misalnya di Andoid, Anda dapat menggunakanbusybox
versi tersebut. Berikut ini juga memecahkan beberapa masalah lain:[0.0000]
Format didahului oleh sesuatu yang tampak seperti informasi warna salah tempat, awalan seperti<6>
.Itu terinspirasi oleh posting blog ini .
Perhatikan, bagaimanapun, bahwa implementasi ini cukup lambat.
sumber
Anda perlu mereferensikan "btime" di / proc / stat, yang merupakan waktu waktu Unix saat sistem di-boot terakhir. Kemudian Anda dapat mendasarkan pada waktu boot sistem tersebut dan kemudian menambahkan detik yang telah berlalu yang diberikan dalam dmesg untuk menghitung stempel waktu untuk setiap kejadian.
sumber
Dengan distro Linux yang lebih lama, opsi lain adalah menggunakan skrip pembungkus, misalnya di Perl atau Python.
Lihat solusinya di sini:
http://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable?lang=en http://jmorano.moretrix.com/2012/03/dmesg-human-readable-timestamps/
sumber