Sistema de Monitoreo del Servidor
Descripción
Sistema de monitoreo en tiempo real de los recursos del servidor implementado para DocuCenter. Permite visualizar métricas de disco, RAM y CPU con actualización automática.
Ubicación
- Ruta:
/admin/reports/server_monitor - Componente Livewire:
App\Http\Livewire\Admin\Reports\ServerMonitor - Servicio:
App\Services\ServerMetricsService - Vista:
resources/views/livewire/admin/reports/server-monitor.blade.php
Características
1. Métricas de Disco
- Espacio total, usado y libre
- Porcentaje de uso
- Alertas visuales según nivel de uso
2. Métricas de RAM
- Memoria total, usada y libre
- Información de buffers y caché
- Porcentaje de uso
- Basado en
/proc/meminfo
3. Métricas de CPU
- Load average (1, 5 y 15 minutos)
- Porcentaje de uso calculado
- Número de CPUs detectados
- Desglose de uso: usuario, sistema, idle
- Basado en
sys_getloadavg()y/proc/stat
4. Información del Sistema
- Hostname
- Sistema operativo y versión
- Versión de PHP
- Uptime del servidor
5. Actualización Automática
- Auto-refresh: Actualización cada 5 segundos (configurable)
- Botón manual: Refresh individual por métrica
- Toggle: Activar/desactivar auto-refresh
- Timestamp: Muestra última actualización
6. Alertas Visuales
- Verde (Success): < 60% de uso - Normal
- Amarillo (Warning): 60-80% de uso - Advertencia
- Rojo (Danger): > 80% de uso - Crítico
Implementación Técnica
Servicio de Métricas
App\Services\ServerMetricsService
Métodos principales:
- getDiskMetrics(): Métricas de disco usando disk_free_space() y disk_total_space()
- getMemoryMetrics(): Métricas de RAM desde /proc/meminfo
- getCpuMetrics(): Métricas de CPU usando sys_getloadavg() y /proc/stat
- getSystemInfo(): Información general del sistema
Componente Livewire
App\Http\Livewire\Admin\Reports\ServerMonitor
Propiedades:
- $diskMetrics: Array con métricas de disco
- $memoryMetrics: Array con métricas de RAM
- $cpuMetrics: Array con métricas de CPU
- $systemInfo: Array con información del sistema
- $autoRefresh: Boolean para auto-actualización
- $refreshInterval: Intervalo en segundos (default: 5)
Métodos:
- loadAllMetrics(): Carga todas las métricas
- refreshDisk(): Actualiza solo métricas de disco
- refreshMemory(): Actualiza solo métricas de RAM
- refreshCpu(): Actualiza solo métricas de CPU
- toggleAutoRefresh(): Activa/desactiva actualización automática
Polling de Livewire
La vista usa Livewire polling para actualización automática:
<div wire:poll.{{ $autoRefresh ? $refreshInterval : 9999 }}s="loadAllMetrics">
Compatibilidad
Producción (Sin Docker)
- ✅ Acceso directo a
/proc/meminfo,/proc/stat,/proc/cpuinfo - ✅ Métricas reales del servidor físico/VPS
- ✅ Todas las funcionalidades disponibles
Desarrollo (Con Docker)
- ✅ Métricas del contenedor Docker
- ⚠️ No muestra métricas del host físico
- ℹ️ Para ver métricas del host se requiere bind mount de
/proco Docker API
Instalación y Uso
1. Archivos Creados
app/
├── Services/
│ └── ServerMetricsService.php
└── Http/
└── Livewire/
└── Admin/
└── Reports/
└── ServerMonitor.php
resources/
└── views/
└── livewire/
└── admin/
└── reports/
└── server-monitor.blade.php
scripts/
└── test-server-monitor.sh
2. Ruta Agregada
En routes/web.php:
Route::get('/server_monitor', \App\Http\Livewire\Admin\Reports\ServerMonitor::class)
->name('server_monitor');
3. Traducciones
Agregadas en:
- lang/es_panel.json
- lang/en_panel.json
4. Acceso
URL: http://tu-dominio/admin/reports/server_monitor
Requiere:
- Autenticación
- Middleware: dynamicAcl y check.active.organization
Testing
Script de Prueba
./scripts/test-server-monitor.sh
Funcionalidad del script:
- Detecta si está en Docker o no
- Prueba obtención de métricas de disco
- Prueba obtención de métricas de RAM
- Prueba obtención de métricas de CPU
- Prueba información del sistema
- Verifica el servicio ServerMetricsService
Prueba Manual
- Acceder a
/admin/reports/server_monitor - Verificar que todas las métricas se muestran
- Probar botones de refresh individual
- Verificar auto-refresh activando/desactivando
- Observar cambios de colores según uso
Consideraciones de Seguridad
Permisos de Archivo
El sistema lee archivos del sistema operativo:
- /proc/meminfo - Información de memoria
- /proc/stat - Estadísticas de CPU
- /proc/cpuinfo - Información de CPUs
- /proc/uptime - Uptime del sistema
Estos archivos son de solo lectura y seguros de acceder.
Middleware
dynamicAcl: Control de acceso basado en rolescheck.active.organization: Verificación de organización activa
Logging
Todos los errores se registran en logs de Laravel:
Log::error('Error obteniendo métricas...', ['error' => $e->getMessage()]);
Personalización
Cambiar Intervalo de Actualización
En el componente Livewire:
public $refreshInterval = 5; // Cambiar a segundos deseados
Cambiar Umbrales de Alerta
En ServerMetricsService::getStatus():
protected function getStatus(float $percentage): string
{
if ($percentage < 60) { // Cambiar umbrales
return 'success';
} elseif ($percentage < 80) {
return 'warning';
} else {
return 'danger';
}
}
Agregar Nuevas Métricas
- Agregar método en
ServerMetricsService - Agregar propiedad en componente Livewire
- Agregar método de refresh en componente
- Agregar tarjeta en vista Blade
Troubleshooting
Problema: No se muestran métricas
Solución:
1. Verificar logs: storage/logs/laravel.log
2. Verificar permisos de lectura en /proc/
3. Verificar que el servicio esté correctamente inyectado
Problema: Auto-refresh no funciona
Solución:
1. Verificar que Livewire esté correctamente configurado
2. Verificar JavaScript en consola del navegador
3. Revisar que wire:poll esté en la vista
Problema: Métricas incorrectas en Docker
Explicación: En Docker, las métricas son del contenedor, no del host. Esto es comportamiento esperado en desarrollo.
Referencias
Mantenimiento
Actualizaciones Futuras Sugeridas
- Gráficos históricos: Almacenar métricas en BD para históricos
- Alertas por email: Notificar cuando se superan umbrales
- Múltiples servidores: Monitorear varios servidores
- Métricas de aplicación: Agregar métricas de Laravel (jobs, cache, etc.)
- Exportación de datos: Exportar métricas a CSV/PDF
Compatibilidad
- ✅ Laravel 9+
- ✅ Livewire 2.x
- ✅ PHP 8.0+
- ✅ Linux (Ubuntu, Debian, CentOS)
- ⚠️ Windows: Funcionalidad limitada (solo disco)
- ⚠️ macOS: Funcionalidad limitada
Autor
Sistema implementado siguiendo las convenciones de DocuCenter: - NO se usan emojis en código o commits - Comentarios y documentación en español - Cumple con middleware de seguridad - Integrado con sistema de traducciones existente