Por qué el Monitoreo es Importante para Apps Generadas con IA
Una vez que tu app generada con IA está en producción, necesitas visibilidad en tres capas: salud de la aplicación, carga de infraestructura y experiencia del usuario. Sin monitoreo, una fuga de memoria o una consulta lenta a la base de datos solo saldrá a la luz cuando los usuarios se quejen. El código generado por IA es especialmente propenso a problemas de rendimiento sutiles — el modelo escribe código que compila y corre, pero puede no usar algoritmos óptimos, puede filtrar conexiones a la base de datos o puede hacer llamadas redundantes a API de servicios costosos como OpenAI. Tratar el monitoreo como un paso de despliegue de primera clase (no como algo afterthought) es lo que separa un prototipo de un sistema production-grade.
Los cuatro pilares cubiertos en esta lección: logging estructurado, seguimiento de errores, métricas de rendimiento y configuración de auto-escalado. Juntos te permiten detectar problemas, diagnosticar la causa raíz y responder automáticamente a la carga.
Logging Estructurado
Las sentencias print no son buscables, no son filtrables y desaparecen en los reinicios de contenedores. Logging estructurado significa emitir logs como objetos JSON con campos consistentes (timestamp, level, route, user_id, duration_ms, status_code). Un agregador centralizado como Loki, CloudWatch Logs o Datadog puede entonces indexarlos y consultarlos.
En Python con FastAPI, usa el módulo `logging` con un formateador JSON en lugar de depender de `print`:
Ahora cada línea de log es un objeto JSON que tu agregador puede filtrar por campo. En Node.js el equivalente es `pino`; en Go usa `zap` o `slog`. El punto es la consistencia: elige un formato y aplícalo en todas partes — incluyendo los logs de workers en segundo plano y cron jobs.
Seguimiento de Errores
Los logs te dicen qué pasó; los trackers de errores te dicen cuándo y con qué frecuencia algo falló, con stack traces completos y agregación. Las dos herramientas más comunes son Sentry y Rollbar. Ambas se instalan mediante un SDK que envuelve tu aplicación, captura excepciones no manejadas y agrupa errores repetidos en issues.
Para una app Node.js con Express, la inicialización son dos líneas:
Para Python Flask, el equivalente es `sentry-sdk` con `FlaskIntegration`. Una vez inicializado, cada excepción no manejada se reporta automáticamente con el stack trace completo, los headers de la request y la versión del release de tu app. La configuración clave: establece `tracesSampleRate` entre 0.1 y 0.3 para producción — muestrear el 100% de los traces es caro y rara vez necesario. Captura contexto relevante de negocio con `tags` (por ejemplo `plan: pro`) para poder filtrar errores por segmento de usuario.
Un error común: trackear errores solo en el proceso principal. Si ejecutas workers en segundo plano (Celery, BullMQ, Sidekiq), cada uno necesita su propia inicialización del SDK. Los errores en un worker silencioso nunca saldrán a la luz de otro modo.
Monitoreo del Rendimiento y las Cuatro Señales de Oro
El framework de las "Cuatro Señales de Oro" de Google es el punto de partida para cualquier dashboard de rendimiento. Latencia: cuánto tardan las requests (p50, p95, p99 — no solo el promedio). Tráfico: requests por segundo. Errores: tasa de requests fallidas. Saturación: qué tan cerca estás de la capacidad (CPU, memoria, profundidad de cola).
En la práctica mides esto con Prometheus + Grafana (auto-hospedado) o con Datadog / New Relic (gestionado). Para un despliegue en Kubernetes, el node-exporter de Prometheus y las librerías cliente de aplicación (por ejemplo `prometheus-fastapi-instrumentator`, `prom-client` para Node) exponen endpoints `/metrics` que Prometheus scrapea cada 15 segundos. Grafana luego los visualiza con reglas de alerta (por ejemplo, llamar al on-call cuando la latencia p95 supera los 2 segundos durante 5 minutos).
Para aplicaciones con uso intensivo de IA, añade una métrica custom: costo de API externa por request. Trackea los tokens consumidos o USD gastados en cada request — es la única forma de detectar costos descontrolados por un loop infinito o un prompt mal configurado.
Reglas de Auto-Escalado
El auto-escalado añade o quita capacidad de cómputo basándose en métricas de carga. En Kubernetes usa el Horizontal Pod Autoscaler (HPA). En AWS usa ECS Service Auto Scaling o EC2 Auto Scaling Groups. En plataformas serverless (Vercel, Cloud Run, Lambda) el escalado suele ser automático pero tú controlas la concurrencia y la memoria.
La configuración base es la misma en todas partes: una métrica a observar (CPU, memoria, requests-por-pod, profundidad de cola) y umbrales objetivo. Aquí tienes un HPA típico de Kubernetes:
Este HPA escala entre 2 y 20 pods, añadiendo capacidad cuando la CPU supera el 60% o cuando el promedio de requests-por-pod excede 100/segundo. Establecer `minReplicas: 2` (no 1) previene downtime durante despliegues y rolling updates. Establecer `maxReplicas` demasiado bajo causa throttling bajo picos; demasiado alto causa costos descontrolados en la nube — dimensiona basándote en el escenario realista más caro, no en el promedio.
Para workloads de IA, escalar solo en CPU es engañoso porque el cuello de botella suele ser una llamada a API externa esperando a OpenAI o una consulta a la base de datos. Escala en profundidad de cola (número de requests pendientes en tu task queue) en su lugar, o combina métricas de CPU + profundidad de cola. La latencia de cold-start también es un factor: mantén al menos un pod caliente corriendo si la latencia de cara al usuario importa.
Resumen
El monitoreo y el auto-escalado no son fases separadas — forman un feedback loop. Las métricas revelan cuándo escalar; los logs y los trackers de errores revelan qué se rompe bajo carga; el auto-escalado previene la rotura. Para aplicaciones generadas con IA específicamente, los riesgos únicos son los costos descontrolados de APIs externas y la latencia impredecible de las llamadas a modelos, así que trackéalos explícitamente. Empieza simple: un logger estructurado, un tracker de errores (Sentry), un HPA básico basado en CPU. Añade complejidad solo cuando los dashboards te muestren que la necesitas.
Punto de control de la lección
Repasa lo aprendido y recibe comentarios sobre tu trabajo.