Si ya estás familiarizado con qué es un Bash script, este artículo es perfecto para dar el siguiente paso: implementar un script enfocado en supervisar métricas clave como el uso de CPU, RAM, espacio en disco y los procesos que consumen más recursos. Con un enfoque práctico y orientado a la eficiencia, te enseñaremos cómo hacerlo en Ubuntu.
Objetivos del Bash Script
El objetivo principal de este script es ofrecer datos precisos sobre métricas críticas del sistema. Esto te permitirá tomar decisiones informadas, ya sea en tiempo real o para análisis posterior. A continuación, desglosamos las métricas clave que supervisaremos:
Uso de CPU
El script detectará picos de uso de la CPU e identificará los procesos que consumen más recursos. Esto es esencial para garantizar un rendimiento estable y evitar cuellos de botella.
Memoria RAM
Supervisaremos cuánta memoria está siendo utilizada y cuánto está disponible, lo cual es crucial para aplicaciones que manejan grandes cantidades de datos.
Espacio en Disco
La herramienta te ayudará a monitorear el espacio libre en tus particiones. Con esta información, podrás prevenir problemas de almacenamiento y mantener la eficiencia del sistema.
Procesos Principales
Identificaremos los procesos que generan el mayor impacto en el rendimiento del sistema, permitiéndote priorizar su optimización o resolución.
Beneficios del Script
- Facilita la identificación de problemas en el sistema.
- Automatiza la supervisión, ahorrando tiempo y esfuerzo.
- Proporciona informes claros para un análisis eficiente.
vim chequeo_maquina.sh
chmod +x chequeo_maquina.sh
./chequeo_maquina.sh
===========================================
Chequeo del Estado del Sistema
Fecha: dom 01 dic 2024 00:42:15 CET
=== Resumen del Comando top ===
top – 00:42:15 up 5 days, 14:10, 2 users, load average: 1,52, 0,86, 1,18
Tareas: 477 total, 1 ejecutar, 475 hibernar, 0 detener, 1 zombie
%Cpu(s): 5,6 us, 3,3 sy, 0,0 ni, 91,1 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
MiB Mem : 31800,0 total, 11895,8 libre, 12008,4 usado, 11614,6 búf/caché
MiB Intercambio: 8192,0 total, 8192,0 libre, 0,0 usado. 19791,6 dispon
=== Estado de la CPU ===
Uso de CPU: 6.5 %
Estado: Uso de CPU dentro de límites normales
=== Estado de la Memoria ===
Memoria Total: 31,05 GB
Memoria Usada: 11,73 GB
Memoria Libre: 11,62 GB
Porcentaje de Uso de Memoria: 37,76 %
=== Top 10 Procesos por Consumo de CPU ===
PID PPID CMD %MEM %CPU
52573 39502 /snap/firefox/5361/usr/lib/ 2.1 2.2
61036 52573 /snap/firefox/5361/usr/lib/ 2.4 1.9
39502 39142 /usr/bin/gnome-shell 1.0 1.0
3412 3328 /opt/google/chrome/chrome – 0.7 0.7
53837 39502 /usr/bin/obs 0.7 0.7
66314 39502 gjs /usr/share/gnome-shell/ 0.2 0.7
2363 2105 /usr/bin/gnome-shell 1.0 0.6
11753 11651 /snap/spotify/80/usr/share/ 0.9 0.5
51867 51800 /usr/share/code/code –type 0.8 0.3
3310 2363 /opt/google/chrome/chrome 1.3 0.3
=== Top 10 Procesos por Consumo de Memoria ===
PID PPID CMD %MEM %CPU
3780 3331 /opt/google/chrome/chrome – 6.0 0.1
61036 52573 /snap/firefox/5361/usr/lib/ 2.4 1.9
52573 39502 /snap/firefox/5361/usr/lib/ 2.1 2.2
3310 2363 /opt/google/chrome/chrome 1.3 0.3
53423 52573 /snap/firefox/5361/usr/lib/ 1.2 0.1
11570 2363 /snap/spotify/80/usr/share/ 1.1 0.1
62878 52573 /snap/firefox/5361/usr/lib/ 1.1 0.1
39502 39142 /usr/bin/gnome-shell 1.0 1.0
2363 2105 /usr/bin/gnome-shell 1.0 0.6
33601 3331 /opt/google/chrome/chrome – 1.0 0.0
=== Estado de los Discos ===
Sistema de Archivos Tamaño Usado Disponible % Uso
tmpfs 3,2G 2,8M 3,2G 1%
/dev/nvme0n1p2 468G 38G 407G 9%
tmpfs 16G 1,2G 15G 8%
tmpfs 5,0M 8,0K 5,0M 1%
efivarfs 246K 143K 99K 60%
/dev/nvme0n1p1 1,1G 6,2M 1,1G 1%
tmpfs 3,2G 152K 3,2G 1%
tmpfs 3,2G 2,6M 3,2G 1%
===========================================
Chequeo completado.
Funciones del bash script
show_top_summary:
Muestra las primeras 5 líneas del comando top .
show_top_processes:
- Lista los 10 procesos que más CPU y memoria consumen, ordenando según los recursos.
check_cpu:
- Extrae el porcentaje de CPU inactiva desde la salida de top.
- Calcula el uso de CPU activo (100 – CPU_IDLE).
- Evalúa si el uso de CPU está por encima del 80% y muestra un estado.
check_memory:
- Usa el comando free -m para obtener datos de la memoria total, usada y libre.
- Convierte los valores de MB a GB y calcula el porcentaje de uso de memoria.
check_disks:
- Obtiene información sobre los discos con df -h y muestra un resumen formateado.
check_system:
- Ejecuta todas las funciones anteriores y organiza la salida con encabezados claros.
Bash Script: chequeo_maquina.sh
#!/bin/bash
# Función para mostrar las primeras 5 líneas del comando top
show_top_summary() {
echo "=== Resumen del Comando top ==="
top -bn1 | head -n 5
echo
}
# Función para listar los 10 procesos que más consumen recursos
show_top_processes() {
echo "=== Top 10 Procesos por Consumo de CPU ==="
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 11
echo
echo "=== Top 10 Procesos por Consumo de Memoria ==="
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 11
echo
}
check_cpu() {
echo "=== Estado de la CPU ==="
# Extraer el porcentaje de CPU inactiva y reemplazar comas por puntos
CPU_IDLE=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}' | sed 's/,/./g')
# Validar que CPU_IDLE tenga un valor numérico
if [[ -z "$CPU_IDLE" || ! "$CPU_IDLE" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
echo "Error: No se pudo obtener el uso de CPU."
return
fi
# Calcular el uso de CPU activo (100 - CPU inactiva)
CPU_USAGE=$(echo "100 - $CPU_IDLE" | bc 2>/dev/null)
if [[ -z "$CPU_USAGE" ]]; then
echo "Error: No se pudo calcular el uso de CPU."
return
fi
echo "Uso de CPU: $CPU_USAGE %"
# Evaluar estado
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
echo "Estado: Uso alto de CPU"
else
echo "Estado: Uso de CPU dentro de límites normales"
fi
echo
}
check_disks() {
echo "=== Estado de los Discos ==="
# Obtener información de los discos
DISK_INFO=$(df -h --output=source,size,used,avail,pcent | tail -n +2)
if [ $? -ne 0 ]; then
echo "Error: No se pudo obtener la información de los discos."
return 1
fi
# Mostrar encabezado
printf "%-20s %10s %10s %10s %10s\n" "Sistema de Archivos" "Tamaño" "Usado" "Disponible" "% Uso"
# Procesar y mostrar información
echo "$DISK_INFO" | while read -r line; do
SOURCE=$(echo "$line" | awk '{print $1}')
SIZE=$(echo "$line" | awk '{print $2}')
USED=$(echo "$line" | awk '{print $3}')
AVAIL=$(echo "$line" | awk '{print $4}')
USAGE=$(echo "$line" | awk '{print $5}')
printf "%-20s %10s %10s %10s %10s\n" "$SOURCE" "$SIZE" "$USED" "$AVAIL" "$USAGE"
done
echo
}
check_memory() {
echo "=== Estado de la Memoria ==="
MEM_INFO=$(free -m)
TOTAL_MEM_MB=$(echo "$MEM_INFO" | awk '/^Mem:/ {print $2}') # Memoria total en MB
USED_MEM_MB=$(echo "$MEM_INFO" | awk '/^Mem:/ {print $3}') # Memoria usada en MB
FREE_MEM_MB=$(echo "$MEM_INFO" | awk '/^Mem:/ {print $4}') # Memoria libre en MB
# Convertir MB a GB
TOTAL_MEM=$(awk "BEGIN {printf \"%.2f\", $TOTAL_MEM_MB / 1024}")
USED_MEM=$(awk "BEGIN {printf \"%.2f\", $USED_MEM_MB / 1024}")
FREE_MEM=$(awk "BEGIN {printf \"%.2f\", $FREE_MEM_MB / 1024}")
# Calcular porcentaje de uso
MEM_USAGE_PERCENT=$(awk "BEGIN {printf \"%.2f\", ($USED_MEM_MB / $TOTAL_MEM_MB) * 100}")
# Mostrar resultados
printf "Memoria Total: %10s GB\n" "$TOTAL_MEM"
printf "Memoria Usada: %10s GB\n" "$USED_MEM"
printf "Memoria Libre: %10s GB\n" "$FREE_MEM"
printf "Porcentaje de Uso de Memoria: %6.2f %%\n" "$MEM_USAGE_PERCENT"
echo
}
# Función principal
check_system() {
echo "==========================================="
echo "Chequeo del Estado del Sistema"
echo "Fecha: $(date)"
echo "==========================================="
echo
show_top_summary
check_cpu
check_memory
show_top_processes
check_disks
echo "==========================================="
echo "Chequeo completado."
}
# Ejecutar función principal
check_system
Cómo usarlo
1) Guardar el script:
Pega el código de arriba en un archivo llamado chequeo_maquina.sh.
Para ello utiliza cualquier editor de texto, o utiliza la interfaz grafica.
vim chequeo_maquina.sh
2)Hacerlo ejecutable:
chmod +x chequeo_maquina.sh
3)Ejecutar el script: ./chequeo_maquina.sh
./chequeo_maquina.sh