For nyligt rodede jeg med en centos maskine som havde lidt problemer. Jeg kunne se en masse fejl i “dmesg” men der var ingen tider på i centos.
På debian kan man altid se hvornår der er sket noget i en dmesg ved at bruge -T efter.
Efter længere tids søgning fandt jeg endeligt en løsning på dette den er dog ikke helt lige til.
Kig hvad printk time står til
# cat /sys/module/printk/parameters/time
N
Står den til N, skal man enable den på følgende måde
# echo 1 >/sys/module/printk/parameters/time
# cat /sys/module/printk/parameters/time
Y
Man kan herefter teste med følgende
# echo "sample log message" >/dev/kmsg
# dmesg | tail
sidste linie vil så være noget ala dette
[3814526.197336] sample log message
Denne tid skal dog omskrives lidt. Da den ikke giver så meget mening for det naturlige øje.
Derfor lav et lille perl script som hedder dmesg.pl
#!/usr/bin/perl -wn
use strict;
foreach my $line (<>) {
my ($uptime) = do { local @ARGV='/proc/uptime';<>}; ($uptime) = ($uptime =~ /^(\d+)\./);
$line=~/^\[\s*(\d+)\.\d+\](.+)/;
printf "[%s]%s\n", scalar localtime(time - $uptime + $1), $2;
}
Man kan herefter bruge det på følgende måde “dmesg |perl dmesg.pl” og så vil den vise dem som er blevet tagget med et timestamp dvs efter det første er ændret så vil man kunne se tiden.
F.eks. ala dette
[Thu Sep 12 08:15:59 2013] sample log message