En este tema, aprenderás cómo utilizar Bash para monitorear sistemas y registrar eventos importantes. El monitoreo y registro son esenciales para mantener la salud y el rendimiento de los sistemas, así como para la resolución de problemas.
Conceptos Clave
- Monitoreo: Proceso de supervisar el estado y el rendimiento de un sistema.
- Registro (Logging): Proceso de capturar y almacenar eventos o mensajes generados por el sistema o aplicaciones.
Herramientas Comunes para Monitoreo y Registro
top
: Muestra los procesos en ejecución y su uso de recursos.htop
: Una versión mejorada detop
con una interfaz más amigable.vmstat
: Muestra estadísticas del sistema como memoria, procesos y CPU.iostat
: Muestra estadísticas de entrada/salida del sistema.dmesg
: Muestra mensajes del kernel.journalctl
: Muestra y gestiona los registros del sistema (usado en sistemas consystemd
).
Ejemplo Práctico: Monitoreo de Recursos del Sistema
Monitoreo de CPU y Memoria
#!/bin/bash # Monitorear el uso de CPU y memoria cada 5 segundos while true; do echo "-----------------------------" echo "Fecha y Hora: $(date)" echo "Uso de CPU:" mpstat 1 1 | grep "all" | awk '{print "Usuario: "$3"%\nSistema: "$5"%\nIdle: "$12"%"}' echo "Uso de Memoria:" free -h | grep "Mem" | awk '{print "Usada: "$3"\nLibre: "$4}' sleep 5 done
Explicación del Código
- Bucle Infinito:
while true; do ... done
ejecuta el bloque de código indefinidamente. - Fecha y Hora:
date
muestra la fecha y hora actuales. - Uso de CPU:
mpstat 1 1
muestra estadísticas de CPU cada segundo durante 1 segundo.grep "all"
filtra la línea con el resumen de todos los CPUs.awk
extrae y formatea los datos relevantes. - Uso de Memoria:
free -h
muestra el uso de memoria en formato legible.grep "Mem"
filtra la línea con la información de la memoria.awk
extrae y formatea los datos relevantes. - Pausa:
sleep 5
pausa la ejecución durante 5 segundos antes de repetir el bucle.
Ejemplo Práctico: Registro de Eventos
Registro de Eventos del Sistema
#!/bin/bash # Archivo de registro LOGFILE="/var/log/custom_monitor.log" # Función para registrar eventos log_event() { local MESSAGE=$1 echo "$(date +'%Y-%m-%d %H:%M:%S') - $MESSAGE" >> $LOGFILE } # Monitorear el uso de CPU y memoria cada 5 segundos while true; do CPU_USAGE=$(mpstat 1 1 | grep "all" | awk '{print $3}') MEM_USAGE=$(free -h | grep "Mem" | awk '{print $3}') log_event "CPU Usage: $CPU_USAGE%, Memory Usage: $MEM_USAGE" sleep 5 done
Explicación del Código
- Archivo de Registro:
LOGFILE="/var/log/custom_monitor.log"
define la ubicación del archivo de registro. - Función de Registro:
log_event()
toma un mensaje como argumento y lo escribe en el archivo de registro con una marca de tiempo. - Monitoreo de Recursos: Similar al ejemplo anterior, pero en lugar de imprimir los resultados, se registran en el archivo de registro usando la función
log_event()
.
Ejercicio Práctico
Ejercicio: Crear un Script de Monitoreo y Registro
Objetivo: Crear un script que monitoree el uso de disco y registre los eventos en un archivo de registro.
Requisitos:
- Monitorear el uso de disco cada 10 segundos.
- Registrar el uso de disco en un archivo de registro con una marca de tiempo.
- El archivo de registro debe estar ubicado en
/var/log/disk_monitor.log
.
Solución:
#!/bin/bash # Archivo de registro LOGFILE="/var/log/disk_monitor.log" # Función para registrar eventos log_event() { local MESSAGE=$1 echo "$(date +'%Y-%m-%d %H:%M:%S') - $MESSAGE" >> $LOGFILE } # Monitorear el uso de disco cada 10 segundos while true; do DISK_USAGE=$(df -h / | grep "/" | awk '{print $5}') log_event "Disk Usage: $DISK_USAGE" sleep 10 done
Explicación del Código
- Archivo de Registro: Define la ubicación del archivo de registro.
- Función de Registro: Toma un mensaje y lo escribe en el archivo de registro con una marca de tiempo.
- Monitoreo de Disco:
df -h /
muestra el uso de disco del sistema de archivos raíz.grep "/"
filtra la línea relevante.awk
extrae el porcentaje de uso de disco. - Pausa:
sleep 10
pausa la ejecución durante 10 segundos antes de repetir el bucle.
Conclusión
En esta sección, has aprendido cómo monitorear recursos del sistema y registrar eventos utilizando Bash. Estas habilidades son cruciales para mantener la salud y el rendimiento de los sistemas, así como para la resolución de problemas. En el siguiente módulo, exploraremos cómo automatizar tareas utilizando Bash.
Curso de Programación en Bash
Módulo 1: Introducción a Bash
- ¿Qué es Bash?
- Configurando tu Entorno
- Navegación Básica en la Línea de Comandos
- Entendiendo el Shell
Módulo 2: Comandos Básicos de Bash
- Operaciones con Archivos y Directorios
- Comandos de Procesamiento de Texto
- Permisos y Propiedad de Archivos
- Redirección y Tuberías
Módulo 3: Fundamentos de Scripting
Módulo 4: Scripting Intermedio
Módulo 5: Técnicas Avanzadas de Scripting
- Operaciones Avanzadas con Archivos
- Gestión de Procesos
- Manejo de Errores y Depuración
- Expresiones Regulares
Módulo 6: Trabajando con Herramientas Externas
Módulo 7: Automatización y Programación
Módulo 8: Mejores Prácticas y Optimización
- Escribiendo Código Legible
- Optimizando Scripts en Bash
- Consideraciones de Seguridad
- Control de Versiones con Git