Monitoreo de Recursos con Comandos Básicos (top, htop, iotop, iftop)
Introducción
El monitoreo de recursos del sistema es una habilidad crítica para cada administrador de sistemas Linux y ingeniero DevOps. Comprender cómo monitorear efectivamente CPU, memoria, E/S de disco y uso de red te permite identificar cuellos de botella de rendimiento, solucionar problemas y optimizar el rendimiento del sistema antes de que los problemas escalen a interrupciones del servicio.
En esta guía completa, exploraremos cuatro herramientas esenciales de monitoreo de línea de comandos: top, htop, iotop e iftop. Estas utilidades proporcionan información en tiempo real sobre el consumo de recursos del sistema y están disponibles en prácticamente todas las distribuciones de Linux. A diferencia de soluciones de monitoreo complejas que requieren una configuración extensa, estos comandos básicos ofrecen visibilidad inmediata del estado del sistema y pueden usarse en situaciones de emergencia cuando las herramientas GUI no están disponibles.
Ya sea que estés diagnosticando un alto uso de CPU, identificando fugas de memoria, rastreando cuellos de botella de E/S de disco o monitoreando el consumo de ancho de banda de red, dominar estas herramientas mejorará significativamente tus capacidades de solución de problemas y efectividad en la administración de sistemas.
Prerrequisitos
Antes de profundizar en el monitoreo de recursos con estos comandos, asegúrate de tener:
- Un servidor o estación de trabajo Linux (Ubuntu 20.04/22.04, Debian 10/11, CentOS 7/8, Rocky Linux 8/9, o similar)
- Acceso root o sudo para instalar paquetes
- Comprensión básica de la interfaz de línea de comandos de Linux
- Acceso SSH a tu servidor (para monitoreo remoto)
- Acceso a terminal con al menos 80x24 caracteres de visualización
Requisitos del Sistema:
- RAM mínima: 512 MB (1 GB recomendado)
- Cualquier kernel Linux moderno (2.6.x o superior)
- Comprensión básica de gestión de procesos y recursos del sistema
Instalación de Herramientas de Monitoreo
La mayoría de las distribuciones de Linux incluyen top por defecto, pero necesitarás instalar htop, iotop e iftop por separado.
En Sistemas Ubuntu/Debian
# Actualizar repositorio de paquetes
sudo apt update
# Instalar htop
sudo apt install htop -y
# Instalar iotop
sudo apt install iotop -y
# Instalar iftop
sudo apt install iftop -y
# Verificar instalaciones
which top htop iotop iftop
En CentOS/Rocky Linux/AlmaLinux
# Habilitar repositorio EPEL (requerido para htop)
sudo yum install epel-release -y
# Instalar herramientas de monitoreo
sudo yum install htop iotop iftop -y
# Verificar instalaciones
which top htop iotop iftop
En Fedora
# Instalar todas las herramientas de una vez
sudo dnf install htop iotop iftop -y
Comprendiendo el Comando top
El comando top es la utilidad más fundamental de monitoreo de procesos en Linux. Proporciona una vista dinámica en tiempo real de los procesos en ejecución y la utilización de recursos del sistema.
Uso Básico
# Lanzar top con configuración predeterminada
top
# Lanzar top y salir después de 5 iteraciones
top -n 5
# Monitorear procesos de usuario específico
top -u username
# Mostrar procesos en modo batch (no interactivo)
top -b -n 1 > top-output.txt
Comprendiendo la Salida de top
Cuando ejecutas top, verás varias secciones:
Sección de Encabezado:
top - 14:23:45 up 15 days, 3:42, 2 users, load average: 0.52, 0.58, 0.61
Tasks: 267 total, 1 running, 266 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.4 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 15948.2 total, 2156.4 free, 8734.5 used, 5057.3 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 6247.8 avail Mem
Métricas Clave Explicadas:
-
Load Average: Tres números representando promedios de carga de 1, 5 y 15 minutos
-
Tasks: Total de procesos, categorizados por estado (running, sleeping, stopped, zombie)
-
Uso de CPU:
us: Procesos de espacio de usuariosy: Procesos de espacio del sistema/kernelni: Procesos con prioridad ajustada (nice)id: Tiempo inactivowa: Tiempo de espera de E/S (crucial para diagnosticar cuellos de botella de disco)hi: Interrupciones de hardwaresi: Interrupciones de softwarest: Tiempo robado (sobrecarga de virtualización)
-
Memoria: Uso de RAM física y swap
Comandos Interactivos en top
Mientras top está en ejecución, puedes usar estos atajos de teclado:
h o ? - Mostrar ayuda
k - Matar un proceso (se te pedirá el PID)
r - Cambiar prioridad de un proceso (renice)
M - Ordenar por uso de memoria
P - Ordenar por uso de CPU
T - Ordenar por tiempo de ejecución
c - Alternar visualización de línea de comandos
1 - Mostrar núcleos de CPU individuales
f - Seleccionar campos a mostrar
W - Guardar configuración actual
q - Salir de top
Ejemplos Prácticos de top
Monitorear procesos intensivos en CPU:
# Mostrar solo los 10 procesos principales, ordenados por CPU
top -b -n 1 | head -n 17
Monitorear proceso específico por nombre:
# Monitorear todos los procesos que contengan "apache"
top -c -p $(pgrep -d',' apache2)
Monitorear con tasa de actualización personalizada:
# Actualizar cada 2 segundos en lugar de los 3 predeterminados
top -d 2
Guardar salida de top para análisis posterior:
# Capturar 10 iteraciones con intervalos de 5 segundos
top -b -d 5 -n 10 > /var/log/top-monitoring-$(date +%Y%m%d-%H%M).log
Dominando htop
htop es un visor de procesos interactivo mejorado que ofrece una interfaz más amigable que top. Proporciona salida codificada por colores, soporte para mouse y gestión de procesos más fácil.
Uso Básico
# Lanzar htop
htop
# Iniciar htop con filtro de usuario específico
htop -u www-data
# Mostrar vista de árbol de procesos
htop -t
# Monitorear proceso específico
htop -p PID1,PID2,PID3
Descripción de la Interfaz de htop
La interfaz de htop consiste en tres secciones principales:
- Encabezado: Medidores visuales de CPU, memoria y swap
- Lista de Procesos: Lista ordenable de procesos en ejecución
- Pie de página: Atajos de teclas de función
Codificación de Colores:
- Verde: CPU usada por procesos de prioridad normal
- Azul: CPU usada por procesos de prioridad baja
- Rojo: Tiempo del sistema/kernel
- Amarillo: Tiempo IRQ
- Magenta: Tiempo Soft IRQ
- Gris: Tiempo de espera de E/S
Atajos de Teclado de htop
F1 o h - Ayuda
F2 o S - Configuración (personalizar visualización)
F3 o / - Buscar proceso
F4 o \ - Filtrar procesos
F5 o t - Vista de árbol
F6 o > - Ordenar por columna
F7 o ] - Aumentar prioridad del proceso
F8 o [ - Disminuir prioridad del proceso
F9 o k - Matar proceso
F10 o q - Salir
Space - Etiquetar proceso
U - Desetiquetar todos los procesos
c - Etiquetar proceso e hijos
Técnicas Avanzadas de htop
Configurar medidores personalizados:
# Presionar F2 para entrar en configuración
# Navegar a la sección "Meters"
# Agregar promedio de CPU, promedio de carga, memoria, swap, etc.
Buscar y filtrar:
# Presionar F3 para buscar
# Escribir nombre del proceso: nginx
# Presionar F4 para filtrar (muestra solo procesos coincidentes)
Análisis de árbol de procesos:
# Presionar F5 para vista de árbol
# Identificar relaciones padre-hijo de procesos
# Útil para comprender servicios systemd y sus procesos generados
Gestión de procesos por lotes:
# Etiquetar múltiples procesos con Space
# Presionar F9 para enviar señal a todos los procesos etiquetados
# Útil para detener múltiples procesos relacionados
Archivo de Configuración de htop
htop guarda su configuración en ~/.config/htop/htoprc:
# Ver configuración actual
cat ~/.config/htop/htoprc
# Ejemplo de configuración
fields=0 48 17 18 38 39 40 2 46 47 49 1
sort_key=46
sort_direction=1
hide_threads=0
hide_kernel_threads=1
hide_userland_threads=0
shadow_other_users=0
show_thread_names=0
show_program_path=0
highlight_base_name=1
Monitoreo de E/S de Disco con iotop
iotop muestra el uso de E/S de disco por procesos, ayudándote a identificar qué aplicaciones están causando alta actividad de disco.
Uso Básico
# Ejecutar iotop (requiere root)
sudo iotop
# Mostrar solo procesos que realmente hacen E/S
sudo iotop -o
# Mostrar E/S acumulada en lugar de ancho de banda
sudo iotop -a
# Modo no interactivo (batch)
sudo iotop -b -n 3
Comprendiendo la Salida de iotop
Total DISK READ : 15.23 M/s | Total DISK WRITE : 42.67 M/s
Actual DISK READ: 15.23 M/s | Actual DISK WRITE: 38.45 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1234 be/4 mysql 0.00 B/s 12.45 M/s 0.00 % 15.23 % mysqld
5678 be/4 www-data 1.23 M/s 5.67 M/s 0.00 % 8.45 % nginx
Explicación de Columnas:
- TID: ID de hilo
- PRIO: Prioridad de E/S (be = mejor esfuerzo, rt = tiempo real)
- USER: Propietario del proceso
- DISK READ/WRITE: Velocidad actual de lectura/escritura
- SWAPIN: Porcentaje de tiempo que el proceso está intercambiando
- IO>: Porcentaje de tiempo dedicado a espera de E/S
- COMMAND: Nombre del proceso
Comandos Interactivos de iotop
left/right - Cambiar columna de ordenación
r - Invertir orden de ordenación
o - Alternar mostrar solo procesos activos
p - Alternar mostrar procesos vs. hilos
a - Alternar E/S acumulada/actual
q - Salir
Ejemplos Prácticos de iotop
Monitorear E/S de base de datos MySQL:
# Mostrar solo procesos MySQL con actividad de E/S
sudo iotop -o -u mysql
Registrar actividad de E/S para análisis:
# Capturar 60 iteraciones con intervalos de 5 segundos (5 minutos en total)
sudo iotop -b -n 60 -d 5 > /var/log/iotop-$(date +%Y%m%d-%H%M).log
Monitorear proceso específico:
# Monitorear proceso por PID
sudo iotop -p 1234
Identificar procesos con mucha escritura:
# Ordenar por operaciones de escritura
sudo iotop -o -P
Solución de Problemas con iotop
Escenario 1: Alta Espera de E/S
# Verificar primero la salida de top
top
# Buscar alto %wa (espera de E/S) en línea de CPU
# Luego usar iotop para identificar el culpable
sudo iotop -o
Escenario 2: Rendimiento Lento de Base de Datos
# Monitorear E/S de base de datos en tiempo real
sudo iotop -o -u mysql -d 1
# Si se ven escrituras altas consistentes, revisar registro de consultas lentas
Escenario 3: Actividad Inesperada de Disco
# Mostrar E/S acumulada para identificar datos totales escritos
sudo iotop -a -o
Monitoreo de Red con iftop
iftop muestra el uso de ancho de banda de red en tiempo real por conexión, mostrando qué hosts están consumiendo más recursos de red.
Uso Básico
# Ejecutar iftop en interfaz predeterminada (requiere root)
sudo iftop
# Monitorear interfaz específica
sudo iftop -i eth0
# Mostrar números de puerto en lugar de nombres de servicio
sudo iftop -P
# No resolver nombres de host (inicio más rápido)
sudo iftop -n
Comprendiendo la Salida de iftop
191Kb 382Kb 573Kb 764Kb
└───────────────────┴──────────────┴──────────────┴──────────────
server.example.com => client1.example.com 125Kb 98Kb 87Kb
<= 45Kb 38Kb 32Kb
server.example.com => client2.example.com 67Kb 54Kb 48Kb
<= 23Kb 19Kb 17Kb
Componentes:
- =>: Tráfico saliente
- <=: Tráfico entrante
- Tres columnas: Promedio de ancho de banda de 2, 10 y 40 segundos
- Estadísticas inferiores: Totales acumulativos, tasas pico y totales actuales
Atajos de Teclado de iftop
h o ? - Ayuda
n - Alternar resolución DNS
s - Alternar visualización de origen
d - Alternar visualización de destino
t - Alternar interfaz de texto
T - Alternar totales acumulativos
p - Alternar visualización de puerto
P - Alternar pausa
1/2/3 - Ordenar por 1ra, 2da o 3ra columna
</> - Ordenar por origen/destino
j/k - Desplazar visualización
q - Salir
Ejemplos Prácticos de iftop
Monitorear interfaz de red específica:
# Monitorear eth0
sudo iftop -i eth0
# Monitorear todas las interfaces (si está soportado)
sudo iftop -i any
Filtrar por red o host:
# Monitorear solo tráfico hacia/desde red específica
sudo iftop -f "net 192.168.1.0/24"
# Monitorear solo tráfico hacia/desde host específico
sudo iftop -f "host 192.168.1.100"
# Monitorear solo tráfico HTTP
sudo iftop -f "port 80"
# Monitorear solo tráfico HTTPS
sudo iftop -f "port 443"
Analizar consumidores de ancho de banda:
# Mostrar puertos y no resolver nombres para visualización más rápida
sudo iftop -i eth0 -nP
Guardar salida para análisis:
# Capturar salida de texto
sudo iftop -t -s 60 > /var/log/iftop-$(date +%Y%m%d-%H%M).log
Filtrado Avanzado de iftop
Combinar múltiples filtros:
# Monitorear solo tráfico HTTP/HTTPS
sudo iftop -f "port 80 or port 443"
# Excluir tráfico SSH
sudo iftop -f "not port 22"
# Monitorear subred específica excluyendo tráfico local
sudo iftop -f "net 10.0.0.0/8 and not host 10.0.1.1"
Monitorear solo conexiones salientes:
# Presionar 's' para alternar origen
# Presionar 'd' para alternar destino
sudo iftop -i eth0 -P
Estrategias de Monitoreo y Mejores Prácticas
Establecer Métricas Base
Antes de poder identificar anomalías, establece métricas de rendimiento base:
#!/bin/bash
# baseline-monitor.sh - Capturar métricas base
LOG_DIR="/var/log/monitoring/baseline"
DATE=$(date +%Y%m%d-%H%M)
mkdir -p "$LOG_DIR"
# Capturar instantánea de top
top -b -n 1 > "$LOG_DIR/top-$DATE.log"
# Capturar instantánea de htop (requiere modo script)
htop -C > "$LOG_DIR/htop-$DATE.log" 2>&1 &
sleep 2
killall htop
# Capturar estadísticas de E/S
sudo iotop -b -n 3 -d 5 > "$LOG_DIR/iotop-$DATE.log"
# Capturar uso de red
sudo timeout 30 iftop -t -s 30 -i eth0 > "$LOG_DIR/iftop-$DATE.log" 2>&1
echo "Métricas base capturadas en $LOG_DIR"
Combinar Múltiples Herramientas
Script de verificación completa del sistema:
#!/bin/bash
# system-health-check.sh
echo "=== Resumen de Recursos del Sistema ==="
echo "Fecha: $(date)"
echo ""
echo "--- Promedio de Carga y Tiempo de Actividad ---"
uptime
echo ""
echo "--- Top 5 Consumidores de CPU ---"
ps aux --sort=-%cpu | head -n 6
echo ""
echo "--- Top 5 Consumidores de Memoria ---"
ps aux --sort=-%mem | head -n 6
echo ""
echo "--- Estadísticas de E/S de Disco ---"
iostat -x 1 3
echo ""
echo "--- Estadísticas de Interfaz de Red ---"
ip -s link
echo ""
echo "--- Conexiones de Red Actuales ---"
ss -s
echo ""
echo "--- Uso de Disco ---"
df -h
echo ""
echo "--- Uso de Memoria ---"
free -h
echo ""
Panel de Monitoreo en Tiempo Real
Usar watch con múltiples comandos:
# Monitorear CPU y memoria cada 2 segundos
watch -n 2 'echo "=== Uso de CPU ===" && mpstat 1 1 && echo "" && echo "=== Memoria ===" && free -h'
# Monitorear disco y red
watch -n 2 'echo "=== E/S de Disco ===" && iostat -x 1 2 | tail -n 3 && echo "" && echo "=== Red ===" && iftop -t -s 2 2>&1'
Monitoreo de Umbrales de Rendimiento
Alertar sobre alto uso de recursos:
#!/bin/bash
# resource-alert.sh
CPU_THRESHOLD=80
MEM_THRESHOLD=90
DISK_THRESHOLD=85
# Verificar uso de CPU
CPU_USAGE=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1 | cut -d'.' -f1)
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
echo "ADVERTENCIA: Uso de CPU al ${CPU_USAGE}%"
echo "Procesos principales consumidores de CPU:"
ps aux --sort=-%cpu | head -n 6
fi
# Verificar uso de memoria
MEM_USAGE=$(free | grep Mem | awk '{printf("%.0f"), ($3/$2) * 100}')
if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
echo "ADVERTENCIA: Uso de memoria al ${MEM_USAGE}%"
echo "Procesos principales consumidores de memoria:"
ps aux --sort=-%mem | head -n 6
fi
# Verificar uso de disco
DISK_USAGE=$(df -h / | tail -n 1 | awk '{print $5}' | cut -d'%' -f1)
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
echo "ADVERTENCIA: Uso de disco al ${DISK_USAGE}%"
df -h
fi
Alertas y Notificaciones
Alertas por Correo Electrónico para Problemas de Recursos
Configurar notificaciones por correo:
#!/bin/bash
# monitor-and-alert.sh
EMAIL="[email protected]"
HOSTNAME=$(hostname)
check_resources() {
# Verificación de CPU
CPU=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$CPU > 80" | bc -l) )); then
echo "Alto uso de CPU detectado: ${CPU}%" | mail -s "Alerta: CPU Alta en $HOSTNAME" $EMAIL
fi
# Verificación de memoria
MEM=$(free | grep Mem | awk '{printf("%.0f"), ($3/$2) * 100}')
if [ "$MEM" -gt 85 ]; then
free -h | mail -s "Alerta: Memoria Alta en $HOSTNAME" $EMAIL
fi
# Verificación de espera de E/S de disco
IO_WAIT=$(iostat -x 1 2 | tail -n 1 | awk '{print $4}' | cut -d'.' -f1)
if [ "$IO_WAIT" -gt 20 ]; then
sudo iotop -b -n 1 | mail -s "Alerta: Alta Espera de E/S en $HOSTNAME" $EMAIL
fi
}
check_resources
Integración con Sistemas de Monitoreo
Exportar métricas para monitoreo externo:
#!/bin/bash
# export-metrics.sh - Exportar a formato Prometheus
cat > /var/lib/node_exporter/textfile_collector/custom_metrics.prom <<EOF
# HELP custom_cpu_usage Porcentaje de uso de CPU
# TYPE custom_cpu_usage gauge
custom_cpu_usage $(top -b -n 1 | grep "Cpu(s)" | awk '{print 100-$8}')
# HELP custom_memory_usage Porcentaje de uso de memoria
# TYPE custom_memory_usage gauge
custom_memory_usage $(free | grep Mem | awk '{printf("%.2f"), ($3/$2) * 100}')
# HELP custom_disk_usage Porcentaje de uso de disco
# TYPE custom_disk_usage gauge
custom_disk_usage $(df / | tail -n 1 | awk '{print $5}' | cut -d'%' -f1)
EOF
Visualización y Reportes
Crear Reportes Históricos
Reporte diario de recursos:
#!/bin/bash
# daily-report.sh
REPORT_DIR="/var/log/monitoring/reports"
REPORT_FILE="$REPORT_DIR/daily-report-$(date +%Y%m%d).txt"
mkdir -p "$REPORT_DIR"
{
echo "================================="
echo "Reporte Diario de Recursos del Sistema"
echo "Fecha: $(date)"
echo "Hostname: $(hostname)"
echo "================================="
echo ""
echo "--- Tiempo de Actividad y Carga del Sistema ---"
uptime
echo ""
echo "--- Resumen de Uso de CPU ---"
mpstat 1 1
echo ""
echo "--- Uso de Memoria ---"
free -h
echo ""
echo "--- Top 10 Consumidores de CPU ---"
ps aux --sort=-%cpu | head -n 11
echo ""
echo "--- Top 10 Consumidores de Memoria ---"
ps aux --sort=-%mem | head -n 11
echo ""
echo "--- Uso de Disco ---"
df -h
echo ""
echo "--- Estadísticas de Red ---"
ip -s link
echo ""
echo "--- Conexiones de Red Activas ---"
ss -s
echo ""
} > "$REPORT_FILE"
echo "Reporte generado: $REPORT_FILE"
Visualización Gráfica
Generar gráficos ASCII a partir de métricas:
#!/bin/bash
# cpu-history.sh - Mostrar historial de uso de CPU
watch -n 1 '
echo "Historial de Uso de CPU (Últimos 60 segundos)"
for i in {1..60}; do
CPU=$(top -b -n 1 | grep "Cpu(s)" | awk "{print 100-\$8}" | cut -d. -f1)
BAR=$(printf "=%.0s" $(seq 1 $((CPU/2))))
printf "%3d%% [%-50s]\n" $CPU "$BAR"
sleep 1
done
'
Solución de Problemas Comunes
Alto Uso de CPU
Pasos de diagnóstico:
# 1. Identificar procesos con alto uso de CPU
top -b -n 1 | head -n 20
# 2. Verificar uso de CPU por núcleo
mpstat -P ALL 1 3
# 3. Identificar procesos limitados por CPU
ps aux --sort=-%cpu | head -n 10
# 4. Verificar procesos descontrolados
htop
# Presionar P para ordenar por CPU, F5 para vista de árbol
# 5. Analizar proceso específico
top -p <PID>
strace -p <PID> -c
Alto Uso de Memoria
Pasos de diagnóstico:
# 1. Verificar uso general de memoria
free -h
# 2. Identificar procesos hambrientos de memoria
ps aux --sort=-%mem | head -n 10
# 3. Verificar fugas de memoria
# Monitorear proceso a lo largo del tiempo
watch -n 5 'ps aux | grep <process_name>'
# 4. Analizar memoria compartida
ipcs -m
# 5. Verificar caché vs uso real
cat /proc/meminfo
Cuellos de Botella de E/S de Disco
Pasos de diagnóstico:
# 1. Verificar tiempo de espera de E/S
top
# Buscar alto 'wa' en línea de CPU
# 2. Identificar procesos con mucha E/S
sudo iotop -o
# 3. Verificar estadísticas de disco
iostat -x 1 5
# 4. Identificar discos lentos
sudo iotop -P -o
# 5. Verificar E/S específica del sistema de archivos
df -h
sudo lsof | grep <mount_point>
Problemas de Ancho de Banda de Red
Pasos de diagnóstico:
# 1. Monitorear ancho de banda general
sudo iftop
# 2. Identificar conexiones con mucho ancho de banda
sudo iftop -P -n
# 3. Verificar errores de interfaz de red
ip -s link
# 4. Monitorear puertos específicos
sudo iftop -f "port 80 or port 443"
# 5. Verificar conexiones activas
ss -tunap | grep ESTABLISHED
Investigación de Procesos
Profundizar en procesos problemáticos:
# Obtener información detallada del proceso
ps -fp <PID>
# Verificar descriptores de archivo del proceso
ls -l /proc/<PID>/fd
# Verificar límites del proceso
cat /proc/<PID>/limits
# Monitorear proceso en tiempo real
watch -n 1 'ps -fp <PID>'
# Verificar hilos del proceso
ps -eLf | grep <PID>
# Rastrear llamadas del sistema
strace -p <PID> -c
Automatización y Monitoreo Continuo
Monitoreo Basado en Cron
Configurar monitoreo periódico:
# Editar crontab
crontab -e
# Agregar trabajos de monitoreo
# Cada 5 minutos - verificar recursos
*/5 * * * * /usr/local/bin/resource-alert.sh
# Cada hora - generar reporte
0 * * * * /usr/local/bin/hourly-report.sh
# Diario a las 2 AM - reporte completo
0 2 * * * /usr/local/bin/daily-report.sh
# Cada 15 minutos - registrar salida de top
*/15 * * * * top -b -n 1 >> /var/log/monitoring/top-$(date +\%Y\%m\%d).log
Servicio Systemd para Monitoreo
Crear servicio de monitoreo:
# Crear archivo de servicio
sudo nano /etc/systemd/system/resource-monitor.service
[Unit]
Description=Monitoreo Continuo de Recursos
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/continuous-monitor.sh
Restart=always
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
Script de monitoreo:
#!/bin/bash
# /usr/local/bin/continuous-monitor.sh
LOG_DIR="/var/log/monitoring/continuous"
mkdir -p "$LOG_DIR"
while true; do
DATE=$(date +%Y%m%d-%H%M%S)
# Registrar uso de CPU
echo "$DATE $(top -b -n 1 | grep "Cpu(s)" | awk '{print $2}')" >> "$LOG_DIR/cpu.log"
# Registrar uso de memoria
echo "$DATE $(free | grep Mem | awk '{printf("%.2f"), ($3/$2) * 100}')" >> "$LOG_DIR/memory.log"
# Registrar E/S de disco
echo "$DATE $(iostat -x 1 1 | tail -n 1 | awk '{print $4}')" >> "$LOG_DIR/io.log"
sleep 60
done
Habilitar e iniciar servicio:
sudo systemctl daemon-reload
sudo systemctl enable resource-monitor.service
sudo systemctl start resource-monitor.service
sudo systemctl status resource-monitor.service
Conclusión
Dominar los comandos básicos de monitoreo de Linux es esencial para una administración y solución de problemas efectivas del sistema. Las herramientas cubiertas en esta guía - top, htop, iotop e iftop - proporcionan visibilidad completa sobre la utilización de recursos del sistema en CPU, memoria, E/S de disco y ancho de banda de red.
Puntos clave:
- top proporciona monitoreo fundamental de procesos y sistema con disponibilidad universal
- htop ofrece una interfaz mejorada y más amigable con mejor visualización e interacción
- iotop se especializa en monitoreo de E/S de disco, esencial para diagnosticar cuellos de botella de almacenamiento
- iftop entrega monitoreo de ancho de banda de red en tiempo real para análisis a nivel de conexión
Al combinar estas herramientas con scripts de monitoreo, mecanismos de alerta y técnicas de visualización, puedes construir una estrategia de monitoreo de recursos robusta que permita la detección proactiva de problemas y una rápida solución de problemas. Ya sea que estés gestionando un solo servidor o una flota de sistemas, estas utilidades de línea de comandos permanecen indispensables en tu conjunto de herramientas operativas.
Recuerda establecer métricas base, implementar monitoreo automatizado, configurar alertas apropiadas y revisar regularmente datos históricos para mantener un rendimiento óptimo del sistema e identificar rápidamente anomalías antes de que impacten los servicios de producción.
Las habilidades desarrolladas a través del dominio de estos comandos básicos de monitoreo forman la base para prácticas de observabilidad más avanzadas y soluciones de monitoreo, haciéndolas valiosas independientemente de la complejidad o escala de tu infraestructura.


