Observabilidad en webs a medida: saber qué pasa en producción

Si en producción no hay logs, métricas ni trazas, el siguiente incidente se diagnostica a ciegas. Qué montar desde el día uno.

El cliente llama: el checkout no cobra, o la home tarda, o «ayer funcionaba». Abres el servidor y no hay más rastro que un access.log de Apache y un «500» en el navegador. El siguiente incidente se diagnostica a ciegas. Eso no es mala suerte. Es una web a medida sin observabilidad.

Observabilidad no es un dashboard bonito ni «tener Analytics». Es poder responder, con datos de producción, qué ha fallado, a quién le ha afectado y desde cuándo. Si no hay logs útiles, métricas ni trazas, estás opinando. Y la opinión no restaura un pico de tráfico.

Este artículo es qué montamos en Truman desde el día uno en un proyecto de desarrollo web a medida. Sin teatro de APM. Con el suelo que evita que el incidente se convierta en una noche de SSH.

Staging no es producción
En local no hay cola, no hay cache sucia, no hay el plugin de terceros que se cae el sábado. El bug vive donde no miras.
El síntoma llega por WhatsApp
Nadie se enteró por una alerta. Se enteró un usuario. Cuando miras, el pico ya pasó y el log rotó.
Hay métricas que no sirven
CPU al 40 % y un uptime verde. El checkout sigue fallando. Estás midiendo el servidor, no el trabajo del usuario.

Qué es observabilidad web a medida (y qué no)

Observabilidad web a medida es la capacidad de explicar el comportamiento del sistema en producción a partir de lo que emite: logs, métricas y trazas. No es lo mismo que monitorización clásica (un ping, un disco, un 200 en la home). Monitorizar te dice que algo va mal. Observar te deja preguntar por qué sin haber previsto la pregunta el día del deploy.

En una plantilla compartida, a menudo «basta» un uptime externo. En una web a medida —CMS propio, integraciones, colas, un checkout, un panel— el fallo es específico. Un endpoint de pago, una query, un job que no corre, un cache que sirve HTML viejo. Si no instrumentas eso, el hosting puede estar sano y el producto, no.

El suelo de infra —máquina, cache, HTTPS— está en hosting y rendimiento para webs a medida. Este artículo es la capa de encima: cómo te enteras de lo que pasa cuando esa infra está viva. Sin observabilidad, el hosting bueno solo te da un sitio más cómodo para no saber.

Logs, métricas, trazas: los tres que importan

Logs: hechos con contexto. No Error a secas. Un request id, el usuario o sesión si aplica, el endpoint, el código de error de la pasarela, el tiempo. Estructura (JSON) para poder filtrar. Niveles de verdad: info no es debug, y error no es «algo raro». Si todo es error, no hay error.

Métricas: números que se pueden alertar. Las cuatro señales clásicas de SRE siguen siendo el mapa: latencia, tráfico, errores, saturación. En una web a medida se traducen a cosas de negocio: tiempo del checkout, tasa de 5xx en /api/pay, longitud de cola, saturación de PHP-FPM o de workers. CPU genérica no te dice si se venden entradas.

Trazas: el viaje de una petición a través de app, base de datos y terceros. Cuando el usuario dice «he pulsado y no ha pasado nada», la traza te dice si se quedó en el DNS, en tu controlador o en el timeout de la API de pago. Sin traza, culpas al azar. Con traza, dejas de discutir.

SeñalDía unoSi falta
Logs estructurados + request idObligatorioEl incidente no se puede reconstruir
Métricas de 5xx, latencia, colaObligatorioTe enteras por el cliente
Uptime de la homeNecesario, no suficienteLa home 200 y el pago muerto
Trazas en rutas críticasEn checkout e integracionesDiscusión eterna con el proveedor
Dashboard de negocio en GrafanaDespués, no en vez deBonito; no despierta a nadie
Logs de debug en producciónNoRuido, coste y a veces datos personales

Qué montar el día uno (sin un departamento de SRE)

No hace falta un stack de FAANG. Hace falta un mínimo que un equipo pequeño pueda operar. En Truman, el día del primer deploy a producción suele incluir esto, no «ya lo pondremos cuando haya tráfico».

Logs estructurados fuera de la máquina (no un fichero que rota y desaparece). Request id en respuesta y en log.
Métricas de aplicación: tasa de error, p95 de las rutas que importan, saturación de workers. No solo disco y RAM.
Errores de front (JS) y de back en el mismo sitio, o al menos correlacionables. El 500 del usuario no puede ser invisible.
Alertas pocas y con dueño. 5xx sostenido, cola parada, certificado, disco. Si suena cada hora, nadie la oye.

El proveedor da igual más de lo que parece: Grafana Cloud, Datadog, Sentry + un Prometheus pequeño, el APM del host. Lo que no da igual es que los logs se queden en el disco del VPS y que la alerta sea un mail a un buzón que nadie lee. Observabilidad es operación, no un logo en el README.

01
Instrumentar el núcleo
Login, pago, envío de formulario, jobs. Cada uno con éxito, fallo y duración. El resto puede esperar.
02
Sacar los logs
Fuera de la máquina, retención acordada, sin secretos ni tarjetas. El request id viaja en cabecera.
03
Alertar poco
Tres o cuatro alertas que importan. Probarlas. Si no despiertan a alguien de verdad, no existen.
04
Ensayar un incidente
Tiras un endpoint en staging-prod-like y cronometras cuánto tardáis en verlo. Si no lo veis, no está montado.

Tip técnico: el request id es el hilo, no el dashboard

Genera un id por petición en el edge (nginx, load balancer o el primer middleware). Ponlo en la respuesta (X-Request-Id), en cada línea de log y en el error que ves en Sentry. Cuando el cliente manda un pantallazo, pides ese id. Sin él, cruzar front, back y el log del proveedor de pago es arqueología. Con él, es una búsqueda.

Alertas que sirven y deuda que las apaga

Una alerta sin runbook es un ruido. Una alerta que salta por un 404 de un bot es un insulto. El criterio es: ¿alguien tiene que hacer algo ahora? Si no, es una métrica, no una alerta. El 5xx de un asset cacheado no es el 5xx del pago. Agrupa. Pon umbral. Revisa cada trimestre qué se silenció «porque molestaba».

La observabilidad también se pudre. Dejar de emitir una métrica, llenar de debug, no versionar dashboards: es deuda técnica con otro nombre. Cuesta lo mismo que un índice sin usar: no duele hasta el incidente. El Core Web Vital que se va —INP incluido, lo tratamos en Core Web Vitals e INP— es otra señal: si solo lo miras en PageSpeed el día del launch, no tienes observabilidad de front. Tienes una foto.

Si esta noche el pago se queda a 8 segundos, ¿os enteráis vosotros o el primero que no puede comprar?

Mallorca Live y Klapper: producción con cara

Mallorca Live Festival no es una corporativa que se visita entre semana. Es un sitio con picos, cartel, venta y una audiencia que no espera a que «reinicies PHP». Ahí la observabilidad no es un extra de arquitectura: es saber si la home, el idioma o una landing de lineup están vivos cuando el tráfico llega de verdad. Un uptime de la raíz no te salva si la ruta que importa es otra.

Klapper añade la capa de producto: inventario, cobro, QR en puerta. El incidente típico no es «la web no carga». Es «esta sesión no valida» o «el stock se ha quedado corto». Logs de operación, métricas de venta y de error de pasarela, trazas hacia el tercero. Sin eso, discutes con el proveedor de pago a ciegas. Con eso, enseñas el request id y se acaba el teatro.

Dani Marquina

Si en producción no puedes responder qué ha fallado y a quién, no tienes un sistema. Tienes esperanza y un SSH. La observabilidad se monta el día uno o se paga en el incidente.

Dani Marquina · Founder, Truman Digital

En València esto aparece en proyectos «ya lanzados» que nos llegan a mantenimiento: código propio, cero instrumentación, el hosting «va bien». El primer trabajo no es una feature. Es poder ver. Hasta entonces, cada arreglo es una hipótesis.

Antes de dar por cerrada la producción, verifica esto

Checklist de observabilidad el día uno
  • ¿Los logs son estructurados, salen de la máquina y llevan request id?
  • ¿Mides 5xx, latencia p95 y saturación de las rutas de negocio, no solo CPU?
  • ¿Hay traza (o al menos correlación) en checkout e integraciones?
  • ¿Los errores de front llegan a algún sitio y se pueden cruzar con el back?
  • ¿Existen tres o cuatro alertas con dueño y se han probado de verdad?
  • ¿Un uptime de la home no es tu única señal de «está vivo»?
  • ¿Los logs no guardan secretos, tarjetas ni tokens en claro?
  • ¿Habéis ensayado un fallo y medido cuánto tardáis en verlo?

Preguntas frecuentes sobre observabilidad en webs a medida

¿Qué es la observabilidad en una web a medida?

Es poder explicar, con logs, métricas y trazas, qué está pasando en producción. No es un ping a la home ni un informe de Analytics. Es instrumentar las rutas que importan (pago, login, jobs) para diagnosticar sin adivinar.

¿Hace falta Datadog o vale algo más simple?

Vale lo que el equipo sepa operar. Un Sentry bien puesto, logs fuera de la máquina y cuatro métricas alertadas superan a un APM de folleto que nadie abre. El logo no observa. La disciplina sí. Cambia de herramienta cuando el volumen o las integraciones lo pidan, no el día del kickoff por moda.

¿Cuándo hay que montarla: en el launch o «cuando haya tráfico»?

El día uno. El primer incidente no avisa. «Cuando haya tráfico» es la frase que deja el checkout a ciegas el sábado de campaña. El mínimo (logs, errores, dos alertas) cabe en el mismo sprint que el deploy a producción.

¿Observabilidad y Core Web Vitals son lo mismo?

No. Los Web Vitals (LCP, INP, CLS) son señales de experiencia en el cliente. La observabilidad cubre también servidor, colas e integraciones. Se complementan: un INP malo sin traza de front es un número; un 5xx sin métrica de negocio es un log. Quieres las dos.

Si tu web a medida está en producción y el siguiente incidente se va a diagnosticar por WhatsApp, montamos el suelo: logs, señales y alertas que se pueden operar.
Revisamos producción

Sobre el autor

Dani Marquina

Dani Marquina

Founder & CTO

Cuéntanos tu proyecto

Nos dices en qué punto estás y te contestamos con franqueza: si podemos ayudarte, te diremos por dónde empezaríamos. Sin compromiso.

Qué pasa después

  1. 01

    Leemos y analizamos tu proyecto

    Revisamos todo lo que nos cuentas y lo entendemos antes de responder. Equipo técnico desde el primer día, sin intermediarios.

  2. 02

    Preparamos una propuesta

    Personalizada, con alcance, enfoque y estimación. No genérica.

  3. 03

    Una llamada para alinear

    Sin presión. Aclaramos dudas y decidís si tiene sentido avanzar.

Hablamos por WhatsApp