| id |
title |
type |
epic |
priority |
status |
project |
created_date |
updated_date |
| RF-SCR-005 |
Monitoreo y Alertas |
Functional Requirement |
IAI-007 |
Media |
Draft |
inmobiliaria-analytics |
2026-01-04 |
2026-01-04 |
RF-IA-007-005: Monitoreo y Alertas
Descripcion
El sistema debe proporcionar monitoreo en tiempo real del estado del scraping, metricas de rendimiento, deteccion de anomalias y alertas automaticas cuando se detecten problemas.
Justificacion
El scraping es un proceso fragil que puede fallar por multiples razones (cambios en HTML, bloqueos, errores de red). El monitoreo proactivo permite detectar y resolver problemas rapidamente antes de que afecten la calidad de datos.
Requisitos Funcionales
RF-005.1: Metricas
| ID |
Requisito |
Prioridad |
| RF-005.1.1 |
El sistema debe registrar propiedades scrapeadas por fuente/hora |
Alta |
| RF-005.1.2 |
El sistema debe calcular success rate por fuente/proxy |
Alta |
| RF-005.1.3 |
El sistema debe medir latencia promedio por request |
Alta |
| RF-005.1.4 |
El sistema debe contar errores por tipo y fuente |
Alta |
| RF-005.1.5 |
El sistema debe trackear estado del pool de proxies |
Alta |
RF-005.2: Dashboard
| ID |
Requisito |
Prioridad |
| RF-005.2.1 |
El sistema debe mostrar estado actual de jobs |
Alta |
| RF-005.2.2 |
El sistema debe visualizar metricas en tiempo real |
Alta |
| RF-005.2.3 |
El sistema debe mostrar historial de ejecuciones |
Media |
| RF-005.2.4 |
El sistema debe permitir drill-down por fuente/job |
Media |
RF-005.3: Alertas
| ID |
Requisito |
Prioridad |
| RF-005.3.1 |
El sistema debe alertar cuando success rate < 80% |
Alta |
| RF-005.3.2 |
El sistema debe alertar cuando un job falla |
Alta |
| RF-005.3.3 |
El sistema debe alertar cuando pool de proxies < umbral |
Alta |
| RF-005.3.4 |
El sistema debe alertar cuando detecte cambio en estructura HTML |
Media |
| RF-005.3.5 |
El sistema debe soportar canales: email, Slack, webhook |
Media |
RF-005.4: Logs
| ID |
Requisito |
Prioridad |
| RF-005.4.1 |
El sistema debe registrar logs estructurados (JSON) |
Alta |
| RF-005.4.2 |
El sistema debe incluir correlation IDs por job |
Alta |
| RF-005.4.3 |
El sistema debe permitir ajustar nivel de log |
Media |
| RF-005.4.4 |
El sistema debe retener logs por 30 dias minimo |
Media |
Metricas Definidas
metricas:
counters:
- scraper_properties_total:
labels: [source, type, status]
description: "Total propiedades procesadas"
- scraper_requests_total:
labels: [source, status_code]
description: "Total requests HTTP"
- scraper_errors_total:
labels: [source, error_type]
description: "Total errores por tipo"
gauges:
- scraper_active_jobs:
labels: [source]
description: "Jobs activos actualmente"
- scraper_proxy_pool_size:
labels: [status]
description: "Proxies por estado"
- scraper_queue_size:
description: "Tareas pendientes en cola"
histograms:
- scraper_request_duration_seconds:
labels: [source]
buckets: [0.1, 0.5, 1, 2, 5, 10]
description: "Duracion de requests"
- scraper_job_duration_seconds:
labels: [source, type]
description: "Duracion total de jobs"
Configuracion de Alertas
alerts:
success_rate_low:
condition: "scraper_success_rate < 0.8"
duration: "5m"
severity: warning
channels: [slack, email]
message: "Success rate bajo en {source}: {value}%"
job_failed:
condition: "scraper_job_status == 'failed'"
severity: critical
channels: [slack, email, pagerduty]
message: "Job fallido: {job_id} en {source}"
proxy_pool_low:
condition: "scraper_proxy_pool_size{status='active'} < 20"
duration: "10m"
severity: warning
channels: [slack]
message: "Pool de proxies bajo: {value} activos"
no_data:
condition: "scraper_properties_total == 0"
duration: "1h"
severity: critical
channels: [slack, email]
message: "Sin propiedades scrapeadas en la ultima hora"
html_change_detected:
condition: "scraper_selector_failures > 10"
duration: "15m"
severity: warning
channels: [slack]
message: "Posible cambio en estructura HTML de {source}"
Dashboard Widgets
dashboard:
row_1:
- widget: "stat"
title: "Propiedades Hoy"
metric: "sum(scraper_properties_total{status='success'})"
- widget: "stat"
title: "Success Rate"
metric: "scraper_success_rate * 100"
format: "percent"
- widget: "stat"
title: "Jobs Activos"
metric: "scraper_active_jobs"
- widget: "stat"
title: "Proxies Activos"
metric: "scraper_proxy_pool_size{status='active'}"
row_2:
- widget: "timeseries"
title: "Propiedades por Hora"
metric: "rate(scraper_properties_total[1h])"
group_by: source
- widget: "timeseries"
title: "Success Rate"
metric: "scraper_success_rate"
group_by: source
row_3:
- widget: "table"
title: "Jobs Recientes"
query: "SELECT * FROM scraping_jobs ORDER BY created_at DESC LIMIT 10"
- widget: "piechart"
title: "Errores por Tipo"
metric: "scraper_errors_total"
group_by: error_type
Criterios de Aceptacion
Dependencias
- Prometheus o similar para metricas
- Grafana o similar para dashboard
- AlertManager o similar para alertas
- ELK Stack o similar para logs
Historias de Usuario Relacionadas
- US-SCR-005: Dashboard de monitoreo
Autor: Tech Lead
Fecha: 2026-01-04