Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I would like to read my Centos 5.x dmesg with timestamp, how do I do this?

share|improve this question

3 Answers 3

up vote 6 down vote accepted

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
share|improve this answer
1  
Thank you for the answer. For anyone looking that's running CentOS 6, I found it in /etc/rsyslog.conf –  Safado Mar 30 '12 at 17:14
    
Yep, 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. –  Christopher Cashell Mar 30 '12 at 18:58
    
Well, I've had this on my list of things to figure out, but now you've saved me some googling –  Safado Mar 30 '12 at 22:37

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. :)

share|improve this answer

There is solution "Enabling Timestamps for dmesg/Kernel Ring Buffer" http://h10025.www1.hp.com/ewfrf/wc/document?cc=us&lc=en&dlc=en&docname=c04016993

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
share|improve this answer
    
that works for me –  c4f4t0r Apr 28 at 17:56
    
Using rc.local is really kind of an ugly solution for this (using rc.local is almost always an ugly solution to anything). A better solution would be to put printk.time = 1 into /etc/sysctl.conf or a file in /etc/sysctl.d/. That's the reason these files exist. Cramming stuff into rc.local will eventually leave you with a fragile, convoluted, messy, unreliable start-up. –  Christopher Cashell Jun 2 at 22:56

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.