Guía rápida de dmesg

dmesg (diagnostic message, mensajes de diagnóstico) es un comando presente en los sistemas operativos Unix que lista el buffer de mensajes del núcleo. Este buffer contiene una gran variedad de mensajes importantes generados durante el arranque del sistema y durante la depuración de aplicaciones.

La información ofrecida por dmesg puede guardarse en el disco duro mediante un demonio de registro, como syslog. Si se usan versiones antiguas de la suite “util-linux”, como por ejemplo en la rama 6 de RedHat GNU/Linux, las opciones disponibles pueden estar limitadas a “[-c] [-r] [-n level] [-s bufsize]”.

util-linux: https://en.wikipedia.org/wiki/Util-linux

Compilar e instalar / utilizar una versión de dmesg actual es muy simple y no es obligatorio sustituir la versión instalada de “util-linux” para poder ejecutarlo.

# Compilar únicamente la utilidad dmesg.
tar -zxvf util-linux-2.27.1.tar.gz 
cd util-linux-2.27.1/
./configure 
make
./dmesg -Tx

Comando dmesg

Facility (Servicios / Recurso) de «log» disponibles: Opción “-f”

Levels (Niveles de «log») disponibles (prioridades): Opción “-l”.

Opciones de dmesg.

 -C, --clear                  Borra el «buffer» circular del núcleo.
 -c, --read-clear             Lee y borra todos los mensajes.
 -D, --console-off            Desactiva la impresión de mensajes por consola.
 -E, --console-on             Activa la impresión de mensajes por consola.
 -F, --file <fichero>         Utiliza el fichero en lugar del «buffer» de registro del núcleo.
 -f, --facility <lista>       Restringe la salida a los recursos definidos.
 -H, --human                  Salida legible para humanos.
 -k, --kernel                 Muestra los mensajes del núcleo.
 -L, --color[=<cuándo>]       Colorea los mensajes (auto, siempre o nunca).                            
 -l, --level <lista>          Restringe la salida a los niveles definidos.
 -n, --console-level <nivel>  Establece el nivel de los mensajes imprimidos por la consola.
 -P, --nopager                No redirige la salida a un busca.
 -r, --raw                    Imprime el «buffer» de mensajes en bruto.
 -S, --syslog                 Fuerza a utilizar syslog(2) en lugar de /dev/kmsg.
 -s, --buffer-size <tamaño>   Tamaño de «buffer» para consultar el «buffer» circular del núcleo.
 -u, --userspace              Muestra los mensajes del espacio d usuario.
 -w, --follow                 Espera por mensajes nuevos.
 -x, --decode                 Descodifica recurso y nivel en una cadena legible.
 -d, --show-delta             Muestra la diferencia de tiempos entre los mensajes imprimidos.
 -e, --reltime                Muestra la hora local y la diferencia de tiempo en formato legible.
 -T, --ctime                  Fechas legibles por humanos.
 -t, --notime                 No imprime la marca de tiempo de los mensajes.
     --time-format <formato>  Muestra la marca de tiempo con el formato: [delta|reltime|ctime|notime|iso].

NOTA: Suspender / Reanudar volverá inexactas las marcas de tiempo de ctime e iso.

 -h, --help      Muestra esta ayuda y sale.
 -V, --version   Muestra información de versión y sale.

A continuación se muestran algunas opciones interesantes de dmesg.

Para filtrar contenido se debe jugar con las opciones “-l” (niveles) y “-f” (servicios de log). Muy útil a la hora de de usar sistemas de alerta / monitorización (Nagios / Incinga, etc).

Las opciones que completan y hacen más legible la información salida para una pronta lectura de los logs del kernel son “-x” (Muestra el servicio y su nivel) y “-T” (Fechas). Puede ser interesante tener un alias con simplemente esas dos opciones.

alias dmesg="./dmesg -Tx"

Mostrar errores, alertas y alertas criticas. (Útil para monitoring).

# Problemas / Avisos importantes del espacio de usuario / kernel.
dmesg -Tx -l alert,err,crit -f user
dmesg -Tx -l alert,err,crit -f kernel
 
# Sin visualizar tipo de nivel ni fecha.
dmesg -t -l alert,err,crit -f kern

Usando el parámetro “-e” en vez de “-T” el formato de fecha es un sumatorio, muy útil para conocer cuanto tiempo tardan en procesarse determinadas tareas.

kern  :info  : [abr 3 00:25] fuse init (API version 7.23)
kern  :err   : [ +13,575311] [drm:intel_set_pch_fifo_underrun_reporting [i915]] *ERROR* uncleared pch fifo underrun on pch transcoder A

Mensajes del núcleo / espacio de usuario.

dmesg -Txk
dmesg -Txu

Espera nuevos mensajes para mostrar al estilo de “tail -f”.

dmesg -Txw