Linux Centos with dmesg timestamp
Solution 1
dmesg
reads the Kernel log ring buffer. It doesn't do timestamps. What you should do is configure syslog to grab the kernel logs from that buffer and send them to a file (if it isn't already set to do so). Note, default CentOS 5.x syslog config sends kernel logs to /var/log/messages
, as I recall.
If you'd like to send all kernel (dmesg) logs to /var/log/kern.log
, using the default syslog daemon, you'd add a line like the following to /etc/syslog.conf
kern.* /var/log/kern.log
Solution 2
There is solution "Enabling Timestamps for dmesg/Kernel Ring Buffer"
You could add:
printk.time=1
to kernel cmdline.
As for me, I have added to rc.local on all machines with puppet. It's easier for me) :
if test -f /sys/module/printk/parameters/time; then
echo 1 > /sys/module/printk/parameters/time
fi
Solution 3
I've written this simple script. Yes, it's slow. If you want something faster you either actually write a script on perl, python or something else. I'm sure this simple script can give you the hang of how it can be calculated.
Please note I ignored the seconds fraction registered in each line (after the . in the timestamp).
#!/bin/bash
localtime() {
perl -e "print(localtime($1).\"\n\");";
}
upnow="$(cut -f1 -d"." /proc/uptime)"
upmmt="$(( $(date +%s) - ${upnow} ))"
dmesg | while read line; do
timestamp="$(echo "${line}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")"
timestamp=$(( ${timestamp} + ${upmmt} ))
echo "${line}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
done
I hope it helps. :)
Related videos on Youtube
edotan
Updated on September 18, 2022Comments
-
edotan almost 2 years
I would like to read my Centos 5.x dmesg with timestamp, how do I do this?
-
ilansch almost 7 yearslater dmesg support the -T flag, maybe try using -T if your dmesg supports it.
-
Giraffe over 5 yearscentos 7+ supports
dmesg -T
-
-
Safado about 12 yearsThank you for the answer. For anyone looking that's running CentOS 6, I found it in
/etc/rsyslog.conf
-
demonkoryu about 12 yearsYep, with CentOS (and RHEL) 6.x, they changed the default syslog daemon from the old sysklogd to rsyslog. It's available as a (supported) package for RHEL/CentOS 5.x, too.
-
Safado about 12 yearsWell, I've had this on my list of things to figure out, but now you've saved me some googling
-
c4f4t0r about 10 yearsthat works for me
-
demonkoryu about 10 yearsUsing
rc.local
is really kind of an ugly solution for this (usingrc.local
is almost always an ugly solution to anything). A better solution would be to putprintk.time = 1
into/etc/sysctl.conf
or a file in/etc/sysctl.d/
. That's the reason these files exist. Cramming stuff intorc.local
will eventually leave you with a fragile, convoluted, messy, unreliable start-up. -
dadinck over 8 years@kasperd Here is what it means: - perl -n is a way to read standard input and read into variable $_. The body (not the BEGIN section) is then run once for each line. - BEGIN runs the code in {} once. $a is the start of dmesg since the epoch - The
s/...
command takes the value in $_ and substitutes the #####.###### part of the timestamp with the "localtime" version of the dmesg offset ( $1) added to the system start time ($a). -print $a
prints the dmesg with the locale friendly time stamp substituted for the "seconds since boot" time stamp. -
Petr over 7 yearsThis what is in comment from @ChristopherCashell is the only correct answer to this question. It's a shame it's not actual answer.
-
Cory Knutson almost 7 yearsAnd like the original answer, it needs some explanation. Can you edit your post, break it down, and step through it?