Sesión 5 de 5 · La última

Despliegue,
supervisión y roadmap

Hoy os toca lo que ya sabéis hacer. La diferencia es qué puede salir mal cuando lo que despliegas decide.

DARATEL TIC | DEL PORTÁTIL AL SERVIDOR | 3 horas
Dónde estamos

Quinta de cinco

S1
KickOff
El punto de partida, medido.
S2
Ecosistema + Claude Code
La herramienta, instalada y usada.
S3
Portal de gestión IP
Vuestros clientes, en una base de datos de verdad.
S4
Agente de soporte multicanal
Le pusimos boca. Y le pusimos límites.
HOY
S5
Despliegue y roadmap
Lo sacamos del portátil. Y decidimos qué se vende.
Agenda

Tres horas · antes de la pausa

15 minDónde estamosVuestro baseline del kick-off contra lo que hay hoy. Sin maquillar
20 minLo que rompe al pasar a un servidorTres cosas medidas esta semana sobre vuestro código. En vivo, no en slide
45 minDesplegarCada uno su instancia, con el runbook en la mano
25 minQue no mienta: supervisiónUn health que diga la verdad, logs legibles, y un backup restaurado
20 minPruebas de cargaMedir contra objetivos escritos, y comparar con la estimación
Agenda

Tras la pausa

15 minDocumentación con IAEl único bloque donde la IA escribe sobre el sistema en vez de operarlo
25 minRoadmap y cómo se vendeCoste por instancia, fallback de proveedores, licencias, y hoja de ruta a 6-12 meses
10 minCierre del programaQué os lleváis, qué queda abierto, y la bolsa de horas

90 de 180 minutos son práctica. Y hoy la práctica es vuestro oficio, así que probablemente iremos más rápido de lo previsto.

PARTE 01

Dónde estamos
de verdad

Lo que dijisteis en el kick-off, y qué se ha movido. Empezamos por aquí porque es lo único honesto que cierra un programa.

El baseline · lo dijisteis vosotros en el kick-off

De aquí partíamos

Vuestros números del primer día. No una media del sector.

30
minutos en resolver una incidencia interna
media y mediana coinciden
6,7
autonomía con IA sobre 10
de 3 a 10 según quién
7,5
minutos en validar un rango IP
los cuatro de redes
5/7
decís que nadie revisa
antes de darlo por terminado

Falta de un portal donde podamos ver con claridad lo que tiene en servicio un cliente. Esto me lleva a preguntar al resto de mis compañeros.

Vuestro dolor número uno. Dos de vosotros lo escribisteis casi igual.

Qué se ha construido contra ese dolor

Lo que existe hoy, y lo que todavía no

Existe

El portal

Clientes, sedes, subredes, dispositivos y servicios. Con búsqueda semántica. Exactamente el portal que pedíais.

Existe

El agente

Lee correo y mensajería, clasifica, abre ticket, consulta el portal y escala a una persona cuando no lo tiene claro.

Todavía no

Uso diario real

Es una prueba de concepto en un servidor de verdad, no un servicio que ya le facturáis a un cliente. Decirlo así evita que se venda solo.

Por eso

Dos medidas, no una

Capacidad adquirida (lo que ahora sabéis hacer) y rendimiento en operación (lo que ahorra de verdad). Lo segundo pide uso real durante meses.

PARTE 02

Producción no es
lo mismo pero
en un servidor

Tres cosas medidas esta semana sobre vuestro propio código. Las tres son invisibles en local, y ninguna se ve leyendo el código.

Por qué esto es distinto de todo lo que ya desplegáis

Un servicio normal y un agente no se rompen igual

Un servicio normal

Si se cae, no hace nada

El daño de una caída es que deja de servir. Molesto, acotado, y se nota enseguida.

Un agente

Si se equivoca, actúa

Contesta a un cliente, abre un ticket, escribe en el inventario. El daño no es dejar de hacer: es hacer lo que no era.

Un servicio normal

Cuesta lo mismo cada mes

Una factura plana. La presupuestas una vez al año y te olvidas.

Un agente

Cuesta por acción

Y se puede quedar sin saldo un martes a las tres de la tarde. Lo vimos esta semana, y lo enseño en dos slides.

La tercera diferencia es la peor: un servicio falla de forma evidente; un agente falla de forma convincente. La respuesta está bien escrita y está mal.

Lo que rompe · uno de tres

El monitor en verde mientras el portal está roto

Portal sin migrar. /clientes/ devuelve 500 en los tres casos. Lo que cambia es lo que contesta el /health. Los tres, medidos hoy.

1

El que teníamos · tres líneas

return {"status": "ok"} -> 200. No comprueba nada. Un monitor de uptime habría dicho que todo iba bien durante horas.

2

El arreglo evidente · y sigue mintiendo

SELECT 1 contra la base -> 200 {"base":"ok"}. La base está viva y contesta. Lo que falta es el esquema.

3

El que sirve

Preguntar por una tabla que el portal necesita -> 503 {"base":"sin migrar"}. Y con la base apagada, 503 {"base":"caida"}.

Comprobar que la dependencia responde no es comprobar que puedes servir. El paso 2 es el que se escribe en el 90 % de los sitios, y es el que hay que mirar con lupa.

Lo que rompe · dos de tres

El agente parado, con saldo en la cuenta

Seis avisos seguidos sin procesar. El error no venía del agente ni del modelo: venía de la factura.

El error real

402 Payment Required

"You requested up to 65536 tokens, but can only afford 31725"

La causa

No pedíamos max_tokens

Sin declararlo, se aplica el máximo del modelo. Y el proveedor exige saldo para cubrir ese máximo en cada llamada, no lo que de verdad gastas.

El arreglo

Una línea

Declarar el tope. Baja el saldo exigido por llamada unas 16 veces.

Y la trampa de hoy

El tope de la clave

El límite de la clave es distinto del saldo de la cuenta. Hoy mismo, esta clave: limit 10 $ · usage 10,08 $ · remaining 0. Devuelve 403 antes de llamar al modelo.

Lo que rompe · tres de tres

El portal, publicado, es el mapa de red de vuestros clientes

Y no se arregla con buena voluntad: se arregla con una variable bien escrita. Medido hoy.

Lo que hay dentro

Sedes, subredes, direcciones, dispositivos

Abierto además a escritura, porque el agente actualiza el portal por esos mismos endpoints.

El detalle que muerde

PORTAL_AUTH=1 no activa nada

El valor que espera el código es activa. Con cualquier otro, el portal se queda abierto y solo escribe un aviso en el log. No falla cerrado.

Con activa

401 en todo

Salvo tres rutas declaradas: /health, /portal/acceso y /portal/escalacion.

Por qué esas tres

Cada una tiene su razón

El monitor tiene que poder preguntar; la puerta no se puede cerrar por dentro; y la escalación se abre desde un móvil, fuera de vuestra red.

PARTE 03

Desplegar

Cada uno su instancia, con el runbook en la mano. Cuarenta y cinco minutos. Aquí es donde se cae una sesión, así que este runbook está ensayado.

Desplegar · el mapa

Cuatro servicios, y el orden importa

1 · primero

db

Imagen pgvector/pgvector:pg16. La de Postgres normal no trae la extensión vector y la migración de búsqueda semántica falla contra ella.

2 · el que migra

portal

Puerto 8000. El comando de arranque se cambia: alembic upgrade head antes de uvicorn. Son 6 migraciones.

3

agente

Sin puerto: no tiene interfaz, se le mira por los logs. Una sola réplica, o dos agentes contestan dos veces al mismo cliente.

4

openwa

Volumen persistente, o hay que reescanear el QR en cada redespliegue. Nunca público: quien alcance ese puerto manda mensajes en vuestro nombre.

Dos ficheros distintos: el portal usa Dockerfile y el agente usa Dockerfile.agente. El build tarda 34 segundos en el servidor.

Desplegar · las variables

Cuatro que, si se olvidan, muerden en silencio

Van idénticas en portal y en agente. Una deriva entre los dos da síntomas muy difíciles de diagnosticar.

Se factura sola

OPENROUTER_MODELO

Sin ponerla, el valor por defecto del código es el modelo más caro. Fijadla.

El grupo de drones

OPENWA_CHATS_PERMITIDOS

Las únicas conversaciones de las que el agente acepta avisos. Sin ella el canal no se monta, a propósito.

Avisa a nadie

AGENTE_EMAIL_ESCALACION

Vacía, el aviso se queda bloqueado y no lo recibe ninguna persona.

Firma el enlace

ESCALACION_SECRETO

El mismo valor en los dos servicios: uno firma y el otro comprueba. Si no coinciden, el portal rechaza los enlaces que manda el agente.

Desplegar · verificar

Tres peticiones y sabéis si ha ido bien

1

GET /health debe dar 200

Prueba que hay un proceso vivo. Y nada más que eso. No prueba que la base esté migrada.

2

GET /clientes/ debe dar 200

Esta es la que de verdad prueba que migró. Si da 500, revisad el comando de arranque del portal.

3

GET /portal/canales debe dar 200

Con el portal cerrado necesita credencial. Sin ella, 401 y es correcto.

4

Y el log del agente

Un ciclo sano registra N pasos, desenlace_registrado=True. Si el servicio sale de inmediato, leedle los logs antes de tocar nada: si falta una credencial, el arranque dice cuál y para. Eso es el control funcionando.

PARTE 04

Que no mienta

Tres cosas, y ninguna es un cuadro de mandos bonito: un health que diga la verdad, logs que se puedan leer, y un backup restaurado.

Supervisión · el health honesto

Un health que solo dice "estoy vivo" no sirve para monitorizar

Medido hoy con OpenWA caído y el portal levantado:

Lo que dice el health

200, en 0,03 s

Y aquí hace bien: el portal sí puede servir el inventario sin mensajería.

Lo que vive el usuario

La página de canales tarda 4,6 s

No se rompe: se arrastra. No todo lo que va mal es un 503.

La pregunta

¿Puedo seguir sirviendo sin esto?

Si la respuesta es sí, no va en el health. Cada dependencia que metéis ahí es una falsa alarma esperando.

Y miradlo en vuestro compose

Solo la base tiene healthcheck

El portal y el agente no tienen ninguno. Y el agente espera al portal con service_started: arrancado no es sano.

Supervisión · lo que ya sabéis y aquí también vale

Un backup sin restaurar no es un backup

Esta frase es vuestra, no nuestra. Se la decís a vuestros clientes. Hoy se la aplicamos a esto.

Ahora

Copias diarias a destino remoto

Sobre el servicio de base de datos. Antes del primer incidente, no después.

Y hoy mismo

Restaurar una

En una base de pruebas, y comprobar que sirve. Si no se ha restaurado, no sabéis si tenéis backup: sabéis que tenéis ficheros.

Qué hay dentro

Lo que más duele perder

El inventario de clientes y el histórico de conversaciones de soporte. El código está en el repositorio; esto no.

Ojo

La sesión de mensajería

Vive en un volumen, no en la base. Si no se respalda, se pierde la vinculación y toca reescanear.

PARTE 05

Medir de verdad

Hay unos objetivos escritos. Se miden. Y se compara con lo que estimamos. Si la estimación estaba mal, se dice y ya está.

Pruebas de carga · medido en el servidor, hoy

Dónde aguanta y dónde se cae

Objetivo declarado antes de medir: p95 por debajo de 500 ms y menos del 1 % de errores.

86 ms
p95 con 10 en paralelo
superada
437 ms
p95 con 60 en paralelo
al límite
523 ms
p95 con 70 en paralelo
no superada
0 %
errores, en todas las pasadas
hasta 100 en paralelo
Pruebas de carga · la lección, que no es la latencia

El caudal se queda clavado en 190 por segundo

Con 10 en paralelo: 191/s. Con 50: 192/s. Con 100: 193/s. El caudal no sube. Lo único que sube es la espera.

Lo que ya sabéis

Es un enlace saturado

Meter más tráfico en un enlace lleno no da más caudal: da más cola. Aquí pasa exactamente lo mismo, y por la misma razón.

La consecuencia práctica

Más réplicas, no más concurrencia

Si hiciera falta más caudal, se replica el portal. Subir la concurrencia contra una sola instancia solo empeora la latencia de todos.

Y el agente

Tiene otro objetivo

Su latencia la manda el proveedor del modelo: en la S4 medimos 7,2 s por clasificación. Se mide aparte, con objetivo aparte.

Cómo se repite

Un script, sin dependencias

python scripts/prueba_carga.py. Da veredicto y termina con error si no se cumple el objetivo: se puede meter en un pipeline.

Capacidad · lo que ocupa esto de verdad

Ocho instancias caben de sobra

Medido contenedor a contenedor en el servidor, hoy.

250 MB
un stack completo
portal 102 + base 36 + mensajería 112
2 GB
los ocho juntos
si cada uno levanta el suyo
29 GB
libres en el servidor
de 31 totales, 8 núcleos
376 GB
de disco libre
3 % usado
PARTE 06

Documentación
con IA

El único bloque donde la IA escribe sobre el sistema en vez de operarlo. Corto a propósito: es lo más fácil de vender y lo más fácil de sobrevender.

Documentación · dónde gana y dónde miente

Lo que sí, y lo que no

Funciona bien

Describir lo que ya existe

Un runbook a partir del código real, un inventario de endpoints, un resumen de qué hace cada módulo. Lee la fuente y la cuenta.

Funciona bien

Documentar una incidencia

Con los logs delante, redacta el parte y el porqué mucho más rápido que vosotros. Y sin que dé pereza hacerlo.

Miente convencida

Explicar por qué se decidió algo

Esa razón no está en el código. Se la inventa, y suena perfectamente razonable. Es el fallo más caro de detectar.

Miente convencida

Documentación de cliente sin verificar

Si el dato no está en el portal, lo rellena. Y ese documento va a acabar delante de un cliente vuestro.

La regla de las cinco sesiones, otra vez: si la afirmación no se puede comprobar contra algo, no se publica.

PARTE 07

Roadmap
y cómo se vende

La mitad comercial del encargo. Coste por instancia, qué hacer cuando un proveedor falla, qué licencias os atan, y la hoja de ruta.

Roadmap · lo que preguntasteis vosotros

"Nosotros tiramos de un proveedor y ya está"

Es literal de la sesión pasada. Y tiene respuesta, que además es barata.

El montaje de hoy

Una pasarela, muchos modelos

El código no habla con un fabricante: habla con una pasarela que enruta. Cambiar de modelo es cambiar una variable de entorno.

Lo que eso os da

Cambiar de proveedor sin tocar código

Si uno se cae o sube el precio, se cambia la variable y se reinicia. Es la misma lógica que tener dos operadores.

Lo que no os da

Un failover automático

Hoy el cambio es manual. Automatizarlo es trabajo, y es una línea del roadmap, no algo que ya esté.

Y el control de gasto

El tope, por clave

Una clave por instancia, con su tope. Un cliente no puede gastarse el saldo de otro. Lo aprendimos por las malas esta semana.

Roadmap · el coste, con las cuentas delante

Qué cuesta tener esto de pie, al mes

0,0065 $
una clasificación suelta
medido en la S4 · una llamada
0,15 $
un aviso completo
medido hoy · 7 llamadas, 59.000 tokens
~69 €
al mes a 500 avisos
derivado de la cifra de al lado

Clasificar cuesta 23 veces menos que resolver, y la diferencia es la que importa cuando le pongáis precio a esto. Hasta esta mañana yo os habría enseñado solo la cifra pequeña — y habría estado diciendo la verdad y engañándoos a la vez.

Roadmap · la letra pequeña que os afecta si revendéis

Antes de ponerle precio a esto, mirad las licencias

Para uso interno da casi igual. Para revender, no.

Comprobadlo vosotros

La pasarela de mensajería

Es una conexión no oficial y su licencia tiene condiciones. Hay que leerla antes de facturarla, no después. Os dejo dónde mirar.

El riesgo operativo

Los baneos

En la S4, a uno de vosotros le banearon dos números, uno de forma irrecuperable. Número dedicado y desechable, siempre.

La alternativa

La vía oficial

Cuesta dinero y pide dar de alta el número, pero no la banean. Si esto se vende a un cliente, es el camino.

Vuestro correo

Es Microsoft, no Gmail

El conector existe y la guía está escrita. Falta el registro de la aplicación, y esos permisos los tenéis vosotros.

Roadmap · 6 a 12 meses

En qué orden, y por qué en ese

1

Cerrar el perímetro y poner el health honesto · semanas 1-2

Sin esto no se puede enseñar a un cliente. Es configuración y unas pocas líneas, no un proyecto.

2

Meter vuestro inventario real · mes 1-2

El portal vacío no ahorra nada. Con vuestros clientes dentro, ataca directamente el dolor número uno del kick-off.

3

Un canal, en serio, con un cliente piloto · mes 2-4

Uno solo. Correo corporativo es el candidato natural, en cuanto esté el registro de la aplicación.

4

Volver a medir contra el baseline · mes 4

Aquí es donde se sabrá si esto ahorra tiempo de verdad. No antes, y conviene no fingir que sí antes.

5

Empaquetarlo como servicio · mes 6-12

Una instancia por cliente, con su clave y su tope. Failover automático de proveedor. Y la licencia resuelta.

Cierre del programa

Qué os lleváis, y qué queda abierto

Os lleváis

Vuestra instancia, en un servidor

Desplegada, supervisada y con una prueba de carga que da veredicto.

Os lleváis

Un informe con vuestros números

Contra vuestro propio baseline, separando lo que sabéis hacer de lo que ya ahorra.

Queda abierto

Lo que depende de vosotros

El registro de la aplicación de correo, el alta del número, y meter el inventario real. Sin eso, esto sigue siendo una prueba de concepto.

Sigue disponible

La bolsa de 10 horas

Para lo que salga: dudas, un despliegue que se atasque, o la siguiente pieza.

Y la frase que resume las cinco sesiones: lo que no está medido, no está hecho.

Fin del programa

Gracias

Cinco sesiones. Y lo que de verdad
se lleva uno es la costumbre de medir.

Bolsa de 10 h disponible|DRAVA AUTOMATIONS
← → para navegar