Observabilidad
Si algo falla en esta web, me entero yo primero
Un formulario que deja de enviar no avisa a nadie: quien lo prueba se va. Por eso cada fallo de esta web llega a Sentry, y de ahí a un canal de Discord, con la versión que lo trajo y la línea que lo causó.
Ver también cómo se edita esta web y cómo trabajo con IA.
Qué es
Saber qué ha fallado sin tener que reproducirlo
Un sistema es observable cuando, al fallar, puedes saber desde fuera qué ha pasado, dónde y a quién ha afectado. Monitorizar es comprobar lo que ya sabes que puede fallar. Observar es poder contestar preguntas que no te habías hecho, como por qué un formulario se rechazó un martes a las once de la noche.
- Errores
- Con su pila, la versión desplegada y el contexto en el que pasaron. Es lo que recoge Sentry.
- Registros
- El diario del servidor: qué peticiones recibe y qué avisos da. Sirve para ver qué pasó justo antes de un error.
- Trazas
- Cuánto tarda cada paso de una petición: una consulta a la base de datos, una subida de imagen.
- Disponibilidad
- Una comprobación desde fuera, cada minuto, de que la web responde.
Lo delicado son las alertas. Cada una tiene que servir para hacer algo: si llegan avisos de cosas que no importan, acabas por no leerlos, y el día que llegue uno grave pasará igual de desapercibido. Un fallo puntual de un proveedor que el código ya gestionó queda registrado, pero no avisa. Y un aviso del navegador que no es un error se filtra.
Qué se observa
Lo que puede fallar y a quién afecta
Formulario de contacto
- Qué puede fallar
- El correo no sale, se rechaza el envío o PHP se cae
- A quién afecta
- A quien quiere encargarte algo
- Antes
- Nadie se enteraba
- Ahora
- Sentry y Discord
JavaScript de la web
- Qué puede fallar
- No llega la clave del formulario o falla un script
- A quién afecta
- Igual: sin clave, el envío se rechaza
- Antes
- Nadie se enteraba
- Ahora
- Sentry y Discord
Alojamiento
- Qué puede fallar
- Caída, certificado caducado, configuración rota
- A quién afecta
- A todo el que entra
- Antes
- Nadie se enteraba
- Ahora
- Monitor cada minuto
Despliegue
- Qué puede fallar
- Falla el build, la descarga del CMS o la subida
- A quién afecta
- La web se queda en la versión anterior
- Antes
- Aviso en Discord
- Ahora
- Igual
CMS
- Qué puede fallar
- Se cae la base de datos o el almacenamiento, falla la API o el panel
- A quién afecta
- A quien edita y al build de la web
- Antes
- Solo el registro del servidor
- Ahora
- Sentry y Discord
Publicar desde el CMS
- Qué puede fallar
- El token de GitHub caduca
- A quién afecta
- Publicar guarda pero no llega a la web
- Antes
- Solo el registro del servidor
- Ahora
- Sentry y Discord
| Pieza | Qué puede fallar | A quién afecta | Antes | Ahora |
|---|---|---|---|---|
| Formulario de contacto | El correo no sale, se rechaza el envío o PHP se cae | A quien quiere encargarte algo | Nadie se enteraba | Sentry y Discord |
| JavaScript de la web | No llega la clave del formulario o falla un script | Igual: sin clave, el envío se rechaza | Nadie se enteraba | Sentry y Discord |
| Alojamiento | Caída, certificado caducado, configuración rota | A todo el que entra | Nadie se enteraba | Monitor cada minuto |
| Despliegue | Falla el build, la descarga del CMS o la subida | La web se queda en la versión anterior | Aviso en Discord | Igual |
| CMS | Se cae la base de datos o el almacenamiento, falla la API o el panel | A quien edita y al build de la web | Solo el registro del servidor | Sentry y Discord |
| Publicar desde el CMS | El token de GitHub caduca | Publicar guarda pero no llega a la web | Solo el registro del servidor | Sentry y Discord |
Las páginas en sí no hace falta vigilarlas: son HTML generado al compilar, y si el build falla, el despliegue se para y avisa. La base de datos y el almacenamiento de imágenes se observan a través del CMS.
Lo que salió
Lo que nadie estaba viendo
El formulario no avisaba de nada
Es lo único de la web que trae clientes. Si el correo no salía, la persona veía un error y quizá escribía por otro lado. Si no lo hacía, el mensaje se perdía.
Cada despliegue rompía los formularios a medio rellenar
La clave que firma el formulario cambiaba en cada build, y publicar en el CMS despliega. Quien escribía mientras tanto recibía un rechazo al enviar. Ahora la clave es fija, y si aun así se rechaza un envío, queda el motivo.
El token que despliega desde el CMS caduca
Cuando caduque, publicar seguirá guardando, pero el cambio no llegará a la web. Antes solo quedaba una línea en el registro del servidor; ahora llega como error.
La primera prueba real guardó una IP
Sentry deduce la IP de quien navega en los errores de JavaScript aunque el código no la mande. Se vio en la prueba, y el mismo día quedó corregido en el código y en la organización.
La política de seguridad no informa de lo que bloquea
Va dentro de la página, y ahí los navegadores ignoran la dirección de informes. Si un script dejaba de coincidir con su firma, se bloqueaba en silencio. Ahora una copia de la política avisa a Sentry de cada bloqueo.
Cómo está montado
Un informador en cada capa
Navegador
Informador propioUnas 80 líneas en lugar del SDK de Sentry, que pesaría más que todo el JavaScript de la web. Recoge los errores del código de la web, descarta los de extensiones y manda como mucho cinco por visita.
Formulario
PHP en el alojamientoAvisa si el correo no sale, si se rechaza un envío y por qué, y si PHP se cae. Si Sentry tarda más de dos segundos en responder, el formulario sigue su camino.
CMS
SDK oficial en el servidorTodo lo que el CMS registra como error llega a Sentry, con la versión desplegada. El build sube los mapas del código para que la pila se lea con los nombres originales.
Política de seguridad
Cabecera en ApacheAl compilar, la política de la página se copia a una cabecera que solo informa. Si el navegador bloquea un script o un recurso, Sentry recibe qué, dónde y por qué regla.
Explicaciones
Claude en GitHub ActionsCada tres horas, Claude lee las incidencias nuevas y el código de la web, y escribe en Discord qué ha pasado, la causa probable, dónde está y qué hacer. Solo puede leer archivos: lo que trae un error lo puede haber escrito cualquiera.
Despliegue
GitHub ActionsCada despliegue avisa en Discord de cómo ha ido, con el commit y el enlace al registro. Sentry recibe ese commit como versión: cada error queda unido al despliegue que lo trajo.
Antes de darlo por bueno, cada capa mandó un error real a Sentry, provocado a propósito en local: un envío rechazado, un error del navegador y un CMS que no podía conectar con su base de datos. Después, una incidencia nueva llegó a Discord en segundos.
Alertas
Qué llega a Discord y cuándo
| Qué pasa | Cuándo avisa |
|---|---|
| Un fallo nuevo en la web o en el CMS | La primera vez que aparece, y de nuevo si vuelve después de darlo por resuelto |
| La explicación de ese fallo | En las tres horas siguientes, con la causa probable, el archivo y la línea |
| El navegador bloquea algo por la política de seguridad | La primera vez por cada recurso bloqueado |
| El correo del formulario no sale | Cada vez, como mucho una cada cinco minutos |
| Un envío rechazado | La primera vez por cada motivo; las siguientes se acumulan en Sentry |
| La web no responde o el certificado ha caducado | Tras tres comprobaciones fallidas seguidas, una por minuto |
| Un despliegue | Al terminar, salga bien o mal |
Todo va al mismo canal que los despliegues: un solo sitio para lo que pasa en la web. Un fallo que se repite se agrupa en la misma incidencia y avisa una vez. Lo grave llega además por correo.
Privacidad
Los errores llegan sin datos personales
- Formulario
- Nunca se manda lo que escribe la persona. Llegan el motivo, el idioma y la versión de PHP. Se comprobó enviando un nombre, un correo y un mensaje de prueba que no aparecieron en ningún evento.
- IP
- El código no la manda, y la organización de Sentry tiene activado que no se guarde aunque llegue.
- CMS
- Sin usuario, cookies, cabeceras ni cuerpos de petición. El inicio de sesión lleva la contraseña: se probó y no sale.
- Dónde
- Los datos se guardan en la región europea de Sentry, en Frankfurt.
- Visitas
- La web sigue sin cookies ni analítica. A Sentry solo llegan informes de error.
Hablamos
¿Sabes qué está fallando en tu tienda?
En una tienda Shopify también hay cosas que fallan sin que nadie avise: un script del tema que da error en un navegador, una app que deja de responder. Cuéntame cómo está montada la tuya y vemos qué conviene vigilar.