Monitorear Uso de Disco
Alerta cuando el espacio en disco cruza umbrales usando un script de Bash que verifica mount points y notifica operadores.
Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.
Visión General
El espacio en disco es un asesino silencioso de servicios productivos. Cuando un log, caché o base de datos llena el disco, las aplicaciones se caen, las escrituras fallan y la recuperación se vuelve urgente. Un simple script de Bash que verifica mount points y alerta cuando el uso cruza un umbral te da advertencia temprana y puede disparar limpieza antes de que la situación se vuelva crítica.
Cuándo Usar
Usa este recurso cuando:
- Quieras monitoreo ligero sin instalar un agente completo.
- Necesites alertar por email, Slack o archivo de log cuando el uso de disco sea alto.
- Ejecutes contenedores, VMs o servidores bare-metal con disco limitado.
- Quieras disparar limpieza automática cuando el uso cruza un umbral.
Solución
Script de monitoreo de uso de disco
#!/usr/bin/env bash
set -euo pipefail
THRESHOLD="${1:-80}"
EMAIL="${2:-admin@example.com}"
# Verificar todos los mount points locales
df -Hl | awk 'NR>1 && /^\/dev/{print $1, $5, $6}' | while read -r fs usage mount; do
usage_val="${usage%%}"
if (( usage_val >= THRESHOLD )); then
echo "WARNING: $mount ($fs) is at $usage"
# Enviar alerta (ejemplo con mail)
echo "Disk usage on $mount is $usage" | mail -s "Disk alert: $mount" "$EMAIL"
else
echo "OK: $mount is at $usage"
fi
done
# Opcional: disparar limpieza para mounts específicos
# if (( usage_val >= 90 )); then
# /usr/local/bin/cleanup-logs.sh
# fi
Explicación
El script usa df -Hl para listar filesystems locales y sus porcentajes de uso. awk filtra el encabezado y las entradas que no son dispositivos. Para cada mount point, elimina el signo de porcentaje, compara el valor numérico con el umbral e imprime una advertencia o mensaje OK. Si se excede el umbral, envía un alerta por email. El bloque de limpieza está comentado porque el borrado automático debe revisarse cuidadosamente antes de habilitarse.
Variantes
| Canal de alerta | Herramienta | Mejor para |
|---|---|---|
mail | Servidores simples con MTA local | |
| Slack | webhook curl | Equipos que ya usan Slack |
| PagerDuty | event API | Escalación on-call en producción |
| Log de archivo | redirect a syslog | Agregación centralizada de logs |
Mejores Prácticas
- Configura umbrales por debajo del 100%. Alerta al 80% y actúa al 90% para tener tiempo de responder.
- Monitorea mount points, no solo el disco total. Un
/tmpo/var/logpequeño puede llenarse independientemente del disco raíz. - Incluye el filesystem en la alerta. Saber qué partición está llena acelera la respuesta.
- Ejecuta desde cron cada pocos minutos. El uso de disco puede crecer rápido durante incidentes.
- Empareja monitoreo con limpieza. Una alerta de uso alto sin plan de limpieza es solo media solución.
Errores Comunes
- Usar
df -hsin cuidado en el parsing. La columna de porcentaje puede estar vacía para filesystems especiales; filtra entradas/dev/. - Alertar demasiado tarde. Esperar al 95% deja casi ningún tiempo para reaccionar.
- Ignorar mounts efímeros.
/tmpy volúmenes de docker pueden llenarse rápido y colapsar servicios. - Enviar alertas a individuos. Usa un alias de equipo o rotación on-call para que las vacaciones no rompan el alerting.
- No manejar fallos de correo. Si el MTA está caído, la alerta nunca llega; registra en un segundo canal.
Preguntas Frecuentes
P: ¿Cómo monitoreo múltiples servidores? R: Ejecuta el script en cada servidor vía cron y envía alertas a un sistema de logging o alerting centralizado. Mejor aún, usa una herramienta de gestión de configuración para desplegar el script.
P: ¿Puedo verificar el uso de disco de un directorio específico?
R: Sí. Usa du -sh /path para verificar un solo directorio, pero para alertas a nivel de partición usa df porque du no detecta límites de mount point.
P: ¿Debería borrar archivos automáticamente cuando el disco esté lleno? R: Solo después de revisión cuidadosa. El borrado automático puede eliminar evidencia necesaria para debugging. Prefiere mover logs a archivo o notificar a un operador.
Recursos Relacionados
Backup Rotation Script
Automate file backups with retention policies using a Bash script that rotates daily, weekly, and monthly snapshots.
RecipeBash Scripting for DevOps Automation and System Tasks
How to write robust Bash scripts for automating deployments, system monitoring, log rotation, and routine maintenance tasks
RecipeLog Rotation and Compression
Rotate and compress application logs with Bash to prevent disk exhaustion and simplify log retention.
RecipeBash Loop Over Files
How to safely loop over files and directories in Bash, handling spaces, globs, and large file lists with correct patterns.
RecipeBash Parallel Execution
How to run shell commands in parallel with xargs, GNU parallel, and Bash background jobs while controlling concurrency and collecting results.