6.5 KiB
6.5 KiB
Sistema de Monitoreo de Rendimiento
🔍 Objetivo
Monitorear en tiempo real el rendimiento del sistema de recording, detectando automáticamente:
- Puntos perdidos por retrasos o errores de lectura
- Estadísticas cada 10 segundos con métricas detalladas
- Tiempos de respuesta de PLC, CSV y UDP
- Uso de CPU promedio
- Errores de lectura/escritura
📊 Métricas Monitoreadas
1. Estadísticas de Puntos
- Points Saved: Puntos guardados exitosamente en CSV
- Points Lost: Puntos perdidos por retrasos en el loop
- Variables Saved: Total de variables guardadas
- UDP Points Sent: Puntos enviados vía UDP streaming
2. Timing y Performance
- Read Time: Tiempo de lectura del PLC por dataset
- CSV Write Time: Tiempo de escritura a archivo CSV
- Loop Delay: Retraso del loop vs. intervalo esperado
- CPU Usage: Uso promedio de CPU del proceso
3. Errores y Fallos
- Read Errors: Errores de lectura del PLC
- CSV Errors: Errores de escritura CSV
- UDP Errors: Errores de transmisión UDP
- Consecutive Errors: Errores consecutivos por dataset
🔥 Logs de Rendimiento
Log Principal (cada 10 segundos)
📊 PERFORMANCE [2025-08-16 15:30:25] | Points: 120/10s (12.0/s) | Variables: 1800 | UDP: 80/10s | CPU: 15.3% | Delay: 0.002s±0.001s | Lost: 0 | Errors: R:0 C:0 U:0
Explicación:
Points: 120/10s (12.0/s)
: 120 puntos guardados en 10s (12 puntos/segundo)Variables: 1800
: Total de variables guardadas (120 puntos × 15 variables)UDP: 80/10s
: 80 puntos enviados vía UDPCPU: 15.3%
: Uso promedio de CPU del procesoDelay: 0.002s±0.001s
: Retraso promedio ± desviación estándarLost: 0
: Puntos perdidosErrors: R:0 C:0 U:0
: Errores de Read/CSV/UDP
Logs de Advertencia
Puntos Perdidos
⚠️ DATA LOSS: 3 points lost in last 10s (avg delay: 0.150s)
⚠️ POINTS LOST: Dataset 'Fast' - 2 points lost (expected: 0.100s, actual: 0.350s, delay: 0.150s)
Alto Uso de CPU
⚠️ HIGH CPU: 85.5% average CPU usage
Errores de Lectura
⚠️ READ ERRORS: 5 read errors in last 10s
Timing Overrun
⏰ TIMING WARNING: Dataset 'Fast' loop overrun by 0.050s (read: 0.025s, csv: 0.020s, total: 0.150s)
🚨 Detección de Puntos Perdidos
Algoritmo de Detección
# Detecta puntos perdidos cuando:
actual_interval = current_time - last_read_time
expected_interval = dataset_sampling_interval
if actual_interval > expected_interval * 1.5: # 50% tolerancia
lost_points = int((actual_interval - expected_interval) / expected_interval)
# Log warning con detalles
Ejemplo de Detección
Dataset configurado: intervalo = 0.1s (10 puntos/segundo)
Lectura anterior: 15:30:25.000
Lectura actual: 15:30:25.350 (retraso de 0.350s)
Puntos perdidos = (0.350 - 0.100) / 0.100 = 2.5 → 2 puntos perdidos
📈 APIs de Monitoreo
/api/performance/current
Métricas actuales (ventana de 10s activa):
{
"success": true,
"current_performance": {
"points_saved": 45,
"points_rate": 12.5,
"variables_saved": 675,
"udp_points": 30,
"points_lost": 0,
"cpu_avg": 15.2,
"delay_avg": 0.002,
"read_errors": 0,
"csv_errors": 0,
"udp_errors": 0
}
}
/api/performance/historical?windows=6
Métricas históricas (últimos N×10s):
{
"success": true,
"historical_performance": {
"windows": 6,
"duration_minutes": 1.0,
"total_points_saved": 720,
"total_variables_saved": 10800,
"total_udp_sent": 480,
"total_points_lost": 0,
"total_errors": 0,
"points_per_second": 12.0,
"loss_rate_percent": 0.0,
"average_cpu_percent": 14.8,
"average_delay_seconds": 0.002
}
}
/api/priority/status
Incluye estadísticas de rendimiento completas:
{
"priority_protection": {
"performance_current": { ... },
"performance_historical": { ... }
}
}
🔧 Configuración y Uso
Inicio Automático
El monitoreo se inicia automáticamente cuando:
# Al iniciar CSV recording:
streamer.start_csv_recording()
# - Inicia PerformanceMonitor
# - Configura intervalos de datasets
# - Comienza logs cada 10s
Configuración de Intervalos
# Se configura automáticamente por dataset:
self.performance_monitor.set_dataset_interval(dataset_id, interval)
# Usado para detectar puntos perdidos
Parada Automática
# Al parar CSV recording:
streamer.stop_csv_recording()
# - Para PerformanceMonitor
# - Guarda estadísticas finales
📋 Interpretación de Métricas
✅ Rendimiento Óptimo
- Points Lost: 0 - Sin puntos perdidos
- CPU < 50% - Uso moderado de CPU
- Delay < 10ms - Timing dentro de tolerancia
- Errors: 0 - Sin errores de lectura/escritura
⚠️ Rendimiento Degradado
- Points Lost > 0 - Revisar carga del sistema
- CPU > 80% - Optimizar configuración
- Delay > 50ms - Reducir frecuencia de muestreo
- Errors > 0 - Verificar conexión PLC/archivos
🚨 Problemas Críticos
- Points Lost > 10% rate - Sistema sobrecargado
- CPU > 95% - Recursos insuficientes
- Consecutive Errors > 5 - Fallo de comunicación
- Read Time > interval - PLC sobrecargado
🛠️ Troubleshooting
Alto Rate de Puntos Perdidos
- Reducir frecuencia de muestreo de datasets
- Optimizar variables - eliminar variables innecesarias
- Verificar carga del sistema operativo
- Revisar conexión PLC - latencia de red
CPU Elevado
- Verificar threads activos en
/api/priority/status
- Reducir datasets simultáneos
- Optimizar hardware - SSD, más RAM
- Cerrar aplicaciones innecesarias
Errores de Lectura
- Verificar estado PLC en
/api/status
- Comprobar variables - direcciones correctas
- Revisar red - ping al PLC
- Verificar snap7.dll disponible
Retrasos de CSV
- Verificar espacio en disco
- Comprobar permisos de escritura
- Optimizar directorio records (SSD)
- Reducir tamaño de archivos CSV
📊 Métricas de Referencia
Sistema Típico (Fast=0.1s, DAR=1.0s)
- Points/second: 11-13 (Fast: 10/s + DAR: 1/s)
- CPU Usage: 10-25% (depende del hardware)
- Read Time: 5-15ms por dataset
- CSV Write: 1-5ms por punto
- Delay: < 10ms normalmente
Sistema Optimizado
- Loss Rate: < 0.1%
- CPU Usage: < 20%
- Average Delay: < 5ms
- Error Rate: 0 errors/10s
La clave es mantener Points Lost = 0 y CPU < 50% para garantizar recording continuo y confiable.