dmesg med timestamp på centos

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

  1. #!/usr/bin/perl -wn
  2. use strict;
  3. foreach my $line (<>) {
  4. my ($uptime) = do { local @ARGV='/proc/uptime';<>}; ($uptime) = ($uptime =~ /^(\d+)\./);
  5. $line=~/^\[\s*(\d+)\.\d+\](.+)/;
  6. printf "[%s]%s\n", scalar localtime(time - $uptime + $1), $2;
  7. }
  8. 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