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
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