Monitoreo
omegaUp utiliza varias herramientas de monitoreo para rastrear el estado, el rendimiento y la confiabilidad del sistema en todos los servicios.
Descripción general
flowchart TB
subgraph Services
Frontend[Frontend/PHP]
Grader[Grader]
Runner[Runner]
Broadcaster[Broadcaster]
GitServer[GitServer]
end
subgraph Metrics
Prometheus[Prometheus]
Grafana[Grafana]
end
subgraph Logging
Logs[Application Logs]
ELK[Log Aggregation]
end
Frontend --> Prometheus
Grader --> Prometheus
Runner --> Prometheus
Broadcaster --> Prometheus
GitServer --> Prometheus
Frontend --> Logs
Grader --> Logs
Prometheus --> Grafana
Logs --> ELK
Colección de métricas
Métricas de calificación
Grader expone métricas en el puerto 6060:
curl http://grader:6060/metrics
| Métrica | Tipo | Descripción |
|---|---|---|
grader_queue_length |
Calibre | Número de envíos en cola |
grader_queue_total_wait_time_seconds |
Histograma | Tiempo que los envíos pasan en cola |
grader_runs_total |
Mostrador | Ejecuciones totales procesadas |
grader_run_duration_seconds |
Histograma | Tiempo para procesar cada ejecución |
grader_runners_available |
Calibre | Número de corredores disponibles |
grader_runners_total |
Calibre | Total de corredores inscritos |
Métricas del corredor
Cada corredor informa su estado al evaluador:
| Métrica | Descripción |
|---|---|
runner_cpu_usage |
Utilización actual de la CPU |
runner_memory_usage |
Consumo de memoria |
runner_executions_total |
Ejecuciones totales realizadas |
runner_compilation_errors |
Fallos de compilación |
Métricas de aplicación (PHP)
Seguimiento de las métricas de la aplicación PHP:
| Métrica | Descripción |
|---|---|
http_requests_total |
Total de solicitudes HTTP por punto final |
http_request_duration_seconds |
Solicitar histograma de latencia |
api_errors_total |
Recuento de errores de API por tipo |
db_query_duration_seconds |
Tiempos de consulta de la base de datos |
cache_hits_total |
Tasa de aciertos de la caché de Redis |
Configuración de Prometeo
Ejemplo de configuración de raspado de Prometheus:
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'grader'
static_configs:
- targets: ['grader:6060']
- job_name: 'broadcaster'
static_configs:
- targets: ['broadcaster:6061']
- job_name: 'gitserver'
static_configs:
- targets: ['gitserver:6062']
- job_name: 'frontend'
static_configs:
- targets: ['frontend:9090']
Paneles clave
Panel de control del calificador
Supervisar el procesamiento de envíos:
- Profundidad de la cola: envíos actuales en espera
- Tasa de procesamiento: ejecuciones por minuto
- Utilización del corredor: corredores activos versus inactivos
- Distribución de veredicto: desglose de AC/WA/TLE
- Tiempo de espera promedio: Tiempo en cola
Panel del concurso
Durante concursos en vivo:
- Participantes activos: usuarios que actualmente envían
- Tasa de envío: Envíos por minuto
- Actualizaciones del marcador: frecuencia de actualización
- Cola de Aclaraciones: Aclaraciones pendientes
Panel de infraestructura
Descripción general del estado del sistema:
- Uso de CPU/memoria: por servicio
- E/S de disco: base de datos y almacenamiento de problemas
- Tráfico de red: comunicación entre servicios
- Tasas de error: 5xx respuestas, tiempos de espera
Reglas de alerta
Alertas críticas
# alerts.yml
groups:
- name: critical
rules:
- alert: GraderQueueBacklog
expr: grader_queue_length > 100
for: 5m
labels:
severity: critical
annotations:
summary: "Grader queue backlog detected"
description: "Queue has {{ $value }} pending submissions"
- alert: NoRunnersAvailable
expr: grader_runners_available == 0
for: 1m
labels:
severity: critical
annotations:
summary: "No runners available"
- alert: HighErrorRate
expr: rate(api_errors_total[5m]) > 10
for: 2m
labels:
severity: warning
annotations:
summary: "High API error rate"
Alertas de advertencia
- alert: HighQueueLatency
expr: histogram_quantile(0.95, grader_queue_total_wait_time_seconds) > 60
for: 10m
labels:
severity: warning
annotations:
summary: "High queue wait time"
- alert: DatabaseSlowQueries
expr: histogram_quantile(0.99, db_query_duration_seconds) > 1
for: 5m
labels:
severity: warning
Registro
Ubicaciones de registros
| Servicio | Ubicación del registro |
|---|---|
| Interfaz (PHP) | /var/log/omegaup/frontend.log |
| Calificador | /var/log/omegaup/grader.log |
| Corredor | /var/log/omegaup/runner.log |
| Nginx | /var/log/nginx/access.log, /var/log/nginx/error.log |
| MySQL | /var/log/mysql/error.log |
Formato de registro
Registro JSON estructurado:
{
"timestamp": "2025-01-23T10:30:00Z",
"level": "INFO",
"service": "grader",
"message": "Run completed",
"run_id": 12345,
"verdict": "AC",
"duration_ms": 450,
"runner": "runner-1"
}
Agregación de registros
Registro centralizado con pila ELK:
# filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/omegaup/*.log
json.keys_under_root: true
output.elasticsearch:
hosts: ["elasticsearch:9200"]
index: "omegaup-%{+yyyy.MM.dd}"
Controles de salud
Puntos finales de estado del servicio
| Servicio | Punto final | Respuesta esperada |
|---|---|---|
| Interfaz | GET /health/ |
200 OK |
| Calificador | GET /grader/status/ |
JSON con información de cola |
| MySQL | Comprobación TCP en 3306 | Conexión exitosa |
| Redis | PING |
PONG |
Comprobaciones de estado de Docker
services:
frontend:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
mysql:
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
Líneas base de desempeño
Métricas esperadas (funcionamiento normal)
| Métrica | Rango normal | Advertencia | Crítico |
|---|---|---|---|
| Longitud de la cola | 0-10 | >50 | >100 |
| Tiempo de espera en cola | <10s | >30s | >60 años |
| Latencia API (p95) | <200ms | >500ms | >1s |
| Tasa de errores | <0.1% | >1% | >5% |
| Utilización del corredor | 20-80% | >90% | 100% |
Solución de problemas con métricas
Envíos lentos
- Verifique
grader_queue_length: ¿acumulación de colas? - Verifique
grader_runners_available: ¿suficientes corredores? - Verifique
grader_run_duration_seconds: ¿problemas de lentitud?
Altas tasas de error
- Verifique
api_errors_totalpor tipo de error - Verifique
db_query_duration_seconds: ¿problemas con la base de datos? - Verifique los registros de servicio para detectar seguimientos de pila
Problemas de memoria
- Verifique los límites de memoria del contenedor
- Revisar las métricas de
cache_size_bytes - Compruebe si hay pérdidas de memoria en procesos de larga duración.
Documentación relacionada
- Solución de problemas - Problemas comunes y soluciones
- Infraestructura - Arquitectura del servicio
- Implementación - Proceso de implementación