Cómo funciona esta página
Aquí se ve la salud de OpenWAF: la red de borde que hace de proxy de tus sitios, el DNS autoritativo, el panel y la API. Se mide desde fuera de nuestra infraestructura, así que sigue funcionando cuando nosotros no.
Cómo medimos
- Cada minuto, sondas en la red de Cloudflare, fuera de nuestra infraestructura, comprueban cada componente igual que lo haría un cliente.
- Los nodos de borde además envían latidos. Si un nodo deja de enviarlos, se marca aunque las sondas aún lleguen a él.
- Un componente solo cambia de estado cuando 2 de 3 comprobaciones ven el fallo, y lo mismo al recuperarse. Un paquete perdido no pinta una barra de rojo.
- La página está alojada en Cloudflare Pages, aparte de nuestra flota. Si nuestros servidores caen, esta página sigue en pie y lo cuenta.
Cómo se calcula la disponibilidad
Cada minuto tiene un estado por componente. La disponibilidad de un día es:
disponibilidad = 1 − (caída total + 0,3 × caída parcial) / minutos medidos
Los minutos de rendimiento degradado y de mantenimiento programado no cuentan como caída. Aun así aparecen en la ficha de cada día.
Las cifras de 30 y 90 días usan la misma fórmula sobre todos los minutos medidos del periodo. Los minutos sin medición se dejan fuera; no cuentan como disponibles.
Colores de los días
Minutos ponderados = minutos de caída total + 0,3 × minutos de caída parcial.
- Sin caídas
- Rendimiento degradado, sin caídas
- Solo mantenimiento
- De 1 a 20 minutos ponderados de caída
- De 21 a 40 minutos ponderados de caída
- Más de 40 minutos ponderados de caída
- Sin mediciones
MTTR y MTBF
- MTTR (tiempo medio de recuperación): lo que tarda de media un componente en recuperarse del todo desde que empieza una caída, en los últimos 90 días.
- MTBF (tiempo medio entre fallos): el tiempo medio que funciona un componente entre el final de una caída y el inicio de la siguiente, en los últimos 90 días.
- Los dos cuentan solo caídas parciales y totales. Están en la API para cada componente, en
metrics.
Usa los datos
Todo lo que hay en esta página está disponible para herramientas, sin cuenta ni clave.
API
| Ruta | Qué devuelve |
|---|---|
/api/v2/summary.json | Estado general, componentes, incidencias abiertas y mantenimiento en curso |
/api/v2/status.json | Solo el estado general |
/api/v2/components.json | Todos los componentes y su estado |
/api/v2/incidents.json | Incidencias recientes |
/api/v2/incidents/unresolved.json | Incidencias sin resolver |
/api/v2/scheduled-maintenances.json | Mantenimiento (también /upcoming.json y /active.json) |
/api/v1/page.json | Lo que usa esta página: 90 días de disponibilidad diaria, MTTR y MTBF |
/api/v1/history.json | Historial por meses, con filtros de componente y tipo |
Los endpoints de /api/v2 siguen el formato de Statuspage: las integraciones que ya leen páginas de Statuspage funcionan sin cambios. CORS abierto para GET.
Feeds
- Atom:
/history.atom| RSS:/history.rss - Calendario de mantenimiento (iCal):
/maintenance.ics - Un feed Atom por incidencia:
/incidents/<id>.atom
Para agentes y LLM
/index.md es esta página en Markdown y /llms.txt resume lo disponible. Una petición a / con Accept: text/markdown también recibe Markdown.
Insignias
Rutas: /badge/status.svg, /badge/<componente>/status.svg, /badge/<componente>/uptime-30d.svg, /badge/<componente>/uptime-90d.svg y /badge/<componente>/sla-99.9.svg. Los ids de componente están en /api/v2/components.json.
Markdown
[](https://status.openwaf.dev)
HTML
<a href="https://status.openwaf.dev"><img src="https://status.openwaf.dev/badge/status.svg" alt="OpenWAF status"></a>
Widget
Una línea en tu web. No se ve mientras todo funciona; durante una incidencia o un mantenimiento muestra un aviso pequeño abajo a la derecha. Usa su propio shadow DOM, así que no toca tus estilos.
<script src="https://status.openwaf.dev/widget.js" async></script>
Si tu web tiene CSP, añade https://status.openwaf.dev a script-src y a connect-src.
Avisos
No hay suscripción por correo. Sigue los feeds o recibe los avisos en Slack, Discord, Microsoft Teams o tu propio webhook desde Suscribirse.