Buscar este blog

viernes, 2 de marzo de 2012

Como volver legible el timestamp de dmesg.

 Tratando de diagnosticar un problema de conectividad en la empresa, me encontré
con el hecho de que no podía determinar a ciencia el momento en que se producían los eventos que estaba visualizando a través de la salida del comando dmesg.

Este comando como primer campo de cada registro/linea muestra un timestamp con los segundos.nanosegundos que pasaron desde el booteo del equipo hasta el evento presentado, algo así


[349375.188024] eth0: no IPv6 routers present

[349375.220015] eth1: no IPv6 routers present


Como no me servía busqué en internet y encontré este post Con dos soluciones interesantes.

La primera, en Debian/Ubuntu se puede revisar un log igual pero con campos de fecha y hora.
cat /var/log/kern.log

La segunda y un poco más divertida es un script que parsea la salida de dmesg y la modifica para mostrarnos este dato. Cito la versión en Pearl:


#!/usr/bin/perl
 
use strict;
use warnings;
 
my @dmesg_new = ();
my $dmesg = "/bin/dmesg";
my @dmesg_old = `$dmesg`;
my $now = time();
my $uptime = `cat /proc/uptime | cut -d"." -f1`;
my $t_now = $now - $uptime;
 
sub format_time {
 my @time = localtime $_[0];
 $time[4]+=1;    # Adjust Month
 $time[5]+=1900;    # Adjust Year
 return sprintf '%4i-%02i-%02i %02i:%02i:%02i', @time[reverse 0..5];
}
 
foreach my $line ( @dmesg_old )
{
 chomp( $line );
 if( $line =~ m/\[\s*(\d+)\.(\d+)\](.*)/i )
 {
 # now - uptime + sekunden
 my $t_time = format_time( $t_now + $1 );
 push( @dmesg_new , "[$t_time] $3" );
 }
}
 
print join( "\n", @dmesg_new );
print "\n";


Copiamos esas lineas a un archivo de texto, guardamos, lo volvemos ejecutable con

chmod +x dmesg_for_humans

y listo, situados en el directorio donde lo guardamos ejecutamos ./dmesg_for_humans y tenemos una salida como esta:

[2012-02-23 11:54:50]  eth0: no IPv6 routers present



[2012-02-23 11:54:50]  eth1: no IPv6 routers present



Recomiendo leer el post que cito ya tiene una versión en python del script y los comentarios suman también.
Espero les sirva