Log en Bash

Este es uno de los capítulos del tutorial Scripts en Bash. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Dependiendo de la tarea que estés realizando con tu script puede ser recomendable, incluso obligatorio, dejar registro. De esta forma tendrás un registro o log, de todo lo que ha ido sucediendo. No solo de los errores que se puedan producir en tu script, que también, si no de los distintos pasos que se dan.

La cuestión es que tu no puedes estar viendo continuamente lo que hacen tus scripts. Es mas, tu haces tus scripts para desentenderte y automatizar tareas, con lo que no tiene sentido que estés viendo que sucede con cada una de ellas. Por supuesto que no te puedes desenteder de las tareas, y para eso es para lo que utilizas, precisamente el log en Bash; para dejar constancia de todo lo que tu script ha realizado.

Log en Bash

Log en Bash

¿Que es eso del log?

Un log o registro, no es mas que un archivo, normalmente, o una base de datos, donde se escribe de forma secuencial todos los eventos, o las acciones que se realizan, por un determinado proceso. En este caso, en se trataría de registrar en un archivo todos esos acontecimientos que genera tu script, de forma que aunque tu no estés viendo en tiempo real lo que está sucediendo, si que puedes ver, a posteriori lo que pasó.

¿Que te puede interesar guardar en el registro? Cada vez que se accede al registro o se intenta acceder, anomalías respecto al funcionamiento normal del sistema, alertas, información sobre la actividad o errores tanto de hardware como de software.

Para conocer un poco mas sobre el log, puedes ver todo lo que sucede en tu sistema. Para ello, tienes que utilizar la herramienta tail, conforme te recomiendo en el capítulo sobre procesar texto del tutorial sobre el terminal.

Así, abre un terminal y ejecuta la siguiente instrucción,

tail -200f /var/log/syslog

Esto te mostrará las últimas 200 líneas del archivo /var/log/syslog, y además te seguirámostrando el resto de entradas que se produzcan en el registro, conforme se vayan produciendo.

Ahora abre otro terminal y ejecuta logger prueba. Verás que inmediatamente aparece una nueva entrada en el archivo /var/log/syslog con el texto prueba.

syslog

¿Que es syslog? Por syslog se entiente tanto el protocolo como la aplicación que envía el mensanje de registro.

Un mensaje de syslog está compuesto de tres campos, la prioridad, la cabecera, y el texto.

La prioridad, informa del recurso que ha generado el mensaje y la severidad o importancia del mensaje. Los códigos de recurso son los siguientes,

NúmeroKeywordDescripción
0kernMensajes del kernel
1userMensajes del nivel de usuario
2mailSistema de correo
3daemonDemonios de sistema
4authSeguridad/Autorización
5syslogMensajes generados internamente por syslogd
6lprSubsistema de impresión
7newsSubsistema de noticias sobre la red
8uucpSubsistema UUCP
9clockDemonio de reloj
10authprivSeguridad/Autorización
11ftpDemonio de FTP
12Subsistema de NTP
13Inspección del registro
14Alerta sobre el registro
15cronDemonio de reloj
16local0Uso local 0
17local1Uso local 1
18local2Uso local 2
19local3Uso local 3
20local4Uso local 4
21local5Uso local 5
22local6Uso local 6
23local7Uso local 7

Por otro lado los códigos de severidad son los siguientes,

CódigoSeveridadKeywordDescripción
0EmergencyemergEmergencia: el sistema está inutilizable
1AlertalertAlerta: se debe actuar inmediatamente
2CriticalcritCrítico: condiciones críticas
3ErrorerrError: condiciones de error
4WarningwarningPeligro: condiciones de peligro
5NoticenoticeAviso: normal, pero condiciones notables
6InfoinfoInformación: mensajes informativos
7DebugdebugDepuración: mensajes de bajo nivel

En cuanto a la cabecera, ahí se indica tanto el tiempo como el equipo que emite el mensaje.

Por último en el mensaje se refleja el propio texto del mismo. En este texto se incluye, o se debe incluir, información sobre el proceso responsable del mensaje.

Se trata de que cada uno de estos mensajes respondas a las preguntas de que, quien, cuando, como y porque. O al menos, que responda la mayor parte de estas preguntas.

¿Como trabajar con el log en Bash? La utilidad logger

Para trabajar con el log en Bash tienes una herramienta llamada logger. Esta herramienta o utilidad, te permite insertar mensajes en el log del sistema, genera mensajes de syslog. La forma mas sencilla de generar un mensaje en syslog, es conforme has hecho anteriormente,

logger "<mensaje>"

Como te he indicado anteriormente es posible definir tanto el recurso que ha generado el mensaje como la severidad del mismo. Para poder establecer recurso y severidad con la utilidad logger, tienes que hacerlo de la siguiente forma,

logger -p <recurso>.<severidad> "<mensaje>"

Por ejemplo,

logger -p local0.info "Mensaje de información"

Si lo haces así, y todavía tienes en funcionamiento tail -200f /var/log/syslog, verás que, por supuesto, aparece ese mensaje en el archivo.

Etiquetas

También es posible etiquetar el mensaje. ¿para que quieres etiquetar el mensaje?. En esa etiqueta puedes establecer el script que ha lanzado ese mensaje. De esta forma, te resultará mucho mas sencillo encontrar un mensaje en syslog buscando simplemente por el nombre del script.

Por ejemplo, puedes completar el mensaje de log anterior utilizando la etiqueta conforme ves a continuación,

logger -p local0.info -t mi_script "Mensaje de información"

Así como la información relativa al recurso o a la severidad no la ves directamente en /var/log/syslog, la etiqueta si que la ves, quedando un mensaje como el que te muestro a continuación,

Jul 30 11:22:40 xps13 mi_script: Mensaje de información

PID

Otra opción interesante que también puedes incluir en el log es el PID del proceso. Aquí tienes varias opciones, no solo es posible que muestre el ID del proceso, sino que también puedes mostrar el ID del proceso padre. Así, en el primer caso, puedes modificar el ejemplo anterior para incluir el identificador del proceso, como sigue,

logger -p local0.info -it mi_script "Mensaje de información"

Esto se mostrará en el logging como ves a continuación,

Jul 30 12:01:38 xps13 mi_script[3632]: Mensaje de información

Donde como ves el ID del proceso aparece entre corchetes. Otra opción que te dará el mismo resultado es,

logger -p local0.info --id -t mi_script "Mensaje de información"

También es posible indicar un número, que en este caso no sería el índice del proceso. Por ejemplo, sería algo como lo que puedes ver a continuación,

logger -p local0.info --id=123 -t mi_script "Mensaje de información"

En el caso de que lo que quieras es que se muestre el ID del proceso padre, es decir, el PPID, tienes que utilizar la opción --id=$$. Esto, traducido al ejemplo que estamos empleando sería algo como lo que puedes ver a continuación,

logger -p local0.info --id=$$ -t mi_script "Mensaje de información"

Incluir el contenido de un archivo

Otra opción que a lo mejor te puede resultar interesante es la de incluir el contenido de un archivo. En este caso no podrías añadir un mensaje, sino que solo podrías incluir ese contenido, pero como te digo, es una opción a tener en cuenta.

De nuevo adecuando el ejemplo que has estado siguiendo hasta el momento quedaría como puedes ver a continuación,

logger -p local0.info -it mi_script -f archivo.txt

Ver y consultar logs

Con esto ya tienes una visión detallada de como puedes generar logs en Bash. Sin embargo, tan importante es generar los logs, como posteriormente consultarlos. Desde luego si solo te dedicas a crear y rellenar logs poco sentido tiene.

Así, para consultar logs, durante este episodio del tutorial te he comentado una opción que es utilizando la herramienta tail, pero desde luego, no es la única. También tienes la opción de utilizar less. Estas dos son para el terminal.

En el caso de que quieras revisar logs con alguna aplicación gráfica te indicaré dos opciones, GNOME Logs y Log File Viewer. Cada una de estas dos aplicaciones tiene sus ventajas e inconvenientes.

De cualquier forma, para esta tarea en particular, de revisar logs, sin dudas prefiero recurrir a less, del cual tienes un extenso artículo titulado menos es mas con less y que te recomiendo encarecidamente que leas.

En el caso de quieras seguir la evolución del log, tal y como has visto en este capítulo del tutorial, la solución sería recurrir a tail -f.

Tanto tail como less son mis dos opciones recomendadas, sin lugar a dudas.


Más información,

2 comentarios en “Log en Bash

  1. GU
    Gustavo Adolfo hace 2 años

    Hola estimados , alguien podría ayudarme a encontrar un sh, para poder monitorear logs, en Linux. y que me mande un correo. Lo que pasa , es que muchas veces , veo que los logs se quedan freezados , o pegados , pero el proceso sh. esta corriendo , entonces nunca nos damos cuenta cuando se pega. y no está generándonos logs, y necesito monitorear cuando no se este generando logs.

  2. ED
    Edgardo Lo Grasso hace 2 años

    Estimado Lorenzo, estoy haciendo el curso scripts en bash, estoy en el capítulo 10 y 11-log, #pregunta si del 10-ayuda se puede hacer un ejemplo, con algún scripts. En el 11-log, mi entorno de trabajo es en una Rpi 4, manjaro sway, donde el archivo var/log/syslog no existe. Esto, es lo que hay, en var/log/ .No sé, si, se pueden crear ? Desde ya muchas gracias por tus aportes…
    ❯ ls -la
    Permissions Size User Date Modified Name
    drwxr-xr-x – root 10 ene 19:24  .
    drwxr-xr-x – root 5 feb 10:05  ..
    drwx—— – root 26 abr 2022  audit
    .rw——- 473k root 5 feb 10:33  boot.log
    .rw-rw—- 800 root 2 feb 15:29  btmp
    .rw-r—– 0 root 9 dic 2022  firewalld
    drwxr-sr-x@ – root 9 dic 2022  journal
    .rw-rw-r– 296k root 5 feb 1:27  lastlog
    drwxr-xr-x – root 25 feb 2021  old
    .rw-r–r– 130k root 5 feb 10:15  pacman.log
    drwx—— – root 15 dic 2022  private
    .rw-r–r– 167 root 10 ene 19:21  resize-fs.log
    drwxr-xr-x – root 10 ene 19:20  samba
    .rw-rw-r– 76k root 21 dic 2022  wtmp

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *