Rendimiento real (RUM)

Ver en Markdown

Core Web Vitals medidos en los navegadores de tus visitantes, LCP, INP, CLS, FCP y TTFB, por página, país, dispositivo y más.

En esta página

La monitorización de usuarios reales (RUM) mide las Core Web Vitals en los navegadores de los visitantes. Viene desactivada; se activa en los ajustes de borde de la zona (rum). Todas las rutas comparten los mismos filtros y usan el percentil 75 (p75).

OperaciónRuta
Ver el resumen RUMGET /v1/orgs/{org}/zones/{zone}/rum/summary
Ver la serie temporal RUMGET /v1/orgs/{org}/zones/{zone}/rum/timeseries
Ver el desglose RUMGET /v1/orgs/{org}/zones/{zone}/rum/breakdown
Ver las partes del LCPGET /v1/orgs/{org}/zones/{zone}/rum/lcp-parts
Ver los culpables RUMGET /v1/orgs/{org}/zones/{zone}/rum/offenders
Ver el informe RUMGET /v1/orgs/{org}/zones/{zone}/rum/report

Ver el resumen RUM

GET /v1/orgs/{org}/zones/{zone}/rum/summary

Devuelve el p75 de LCP, INP, CLS, FCP y TTFB con su valoración, frente al periodo anterior de la misma duración, y lo que hizo el borde con el script de medida (injection). Los percentiles son por vista de página; las visitas se estiman a partir de la tasa de muestreo.

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 7 días.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
hostconsultastringNoSolo ese nombre. Como mucho 253 caracteres.
pathconsultastringNoSolo esa ruta exacta. Como mucho 512 caracteres. Patrón ^/.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas). Patrón ^[A-Za-z]{2}$.
nodeconsultastringNoSolo las vistas medidas a través de ese nodo. Como mucho 128 caracteres.
deviceconsultastringNoSolo ese tipo de dispositivo. Uno de mobile, tablet, desktop.
connectionconsultastringNoSolo ese tipo de conexión efectiva. Uno de 4g, 3g, 2g, slow-2g.
nav_typeconsultastringNoSolo ese tipo de navegación. Uno de navigate, reload, back-forward, back-forward-cache, prerender, restore.

Respuesta

CampoTipoDescripción
sincestring (date-time)
untilstring (date-time)
prev_sincestring (date-time)
prev_untilstring (date-time)
visitsnumberVistas de página estimadas: Σ 1/sample_rate, redondeado.
prev_visitsnumber
metricsobject
metrics.lcpRumSummaryAgg
metrics.inpRumSummaryAgg
metrics.clsRumSummaryAgg
metrics.fcpRumSummaryAgg
metrics.ttfbRumSummaryAgg
injectionobject
injection.injectedinteger
injection.csp_nonceinteger
injection.csp_blockedinteger
injection.no_headinteger
injection.sampled_outinteger

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rum/summary" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "since": "2026-10-27T09:30:00Z",
  "until": "2026-10-27T09:30:00Z",
  "prev_since": "2026-10-27T09:30:00Z",
  "prev_until": "2026-10-27T09:30:00Z",
  "visits": 128.0,
  "prev_visits": 128.0,
  "metrics": {
    "lcp": {
      "p50": 0.5,
      "p75": 0.5,
      "p90": 0.5,
      "count": 128,
      "good": 0,
      "needs_improvement": 0,
      "poor": 0,
      "prev_p75": 0.5,
      "prev_count": 128
    },
    "inp": {
      "p50": 0.5,
      "p75": 0.5,
      "p90": 0.5,
      "count": 128,
      "good": 0,
      "needs_improvement": 0,
      "poor": 0,
      "prev_p75": 0.5,
      "prev_count": 128
    },
    "cls": {
      "p50": 0.5,
      "p75": 0.5,
      "p90": 0.5,
      "count": 128,
      "good": 0,
      "needs_improvement": 0,
      "poor": 0,
      "prev_p75": 0.5,
      "prev_count": 128
    },
    "fcp": {
      "p50": 0.5,
      "p75": 0.5,
      "p90": 0.5,
      "count": 128,
      "good": 0,
      "needs_improvement": 0,
      "poor": 0,
      "prev_p75": 0.5,
      "prev_count": 128
    },
    "ttfb": {
      "p50": 0.5,
      "p75": 0.5,
      "p90": 0.5,
      "count": 128,
      "good": 0,
      "needs_improvement": 0,
      "poor": 0,
      "prev_p75": 0.5,
      "prev_count": 128
    }
  },
  "injection": {
    "injected": 0,
    "csp_nonce": 0,
    "csp_blocked": 0,
    "no_head": 0,
    "sampled_out": 0
  }
}

Ver la serie temporal RUM

GET /v1/orgs/{org}/zones/{zone}/rum/timeseries

Devuelve el p75 de cada métrica y las visitas por intervalo, también los intervalos vacíos (con null y 0).

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 7 días.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
hostconsultastringNoSolo ese nombre. Como mucho 253 caracteres.
pathconsultastringNoSolo esa ruta exacta. Como mucho 512 caracteres. Patrón ^/.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas). Patrón ^[A-Za-z]{2}$.
nodeconsultastringNoSolo las vistas medidas a través de ese nodo. Como mucho 128 caracteres.
deviceconsultastringNoSolo ese tipo de dispositivo. Uno de mobile, tablet, desktop.
connectionconsultastringNoSolo ese tipo de conexión efectiva. Uno de 4g, 3g, 2g, slow-2g.
nav_typeconsultastringNoSolo ese tipo de navegación. Uno de navigate, reload, back-forward, back-forward-cache, prerender, restore.
stepconsultaintegerNoSegundos por punto, múltiplo de 60, como mucho 1000 puntos. Por defecto el menor de 300, 900, 1800, 3600, 10800, 21600, 43200 y 86400 que da como mucho 60 puntos. Cubos alineados con la época Unix (UTC). Mínimo 60.

Respuesta

CampoTipoDescripción
stepinteger
pointsarray de object
points[].tsstring (date-time)Fecha de la petición.
points[].visitsnumber
points[].lcpnumber o nullp75.
points[].inpnumber o null
points[].clsnumber o null
points[].fcpnumber o null
points[].ttfbnumber o null

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rum/timeseries" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "step": 0,
  "points": [
    {
      "ts": "2026-10-27T09:30:00Z",
      "visits": 128.0,
      "lcp": 0.5,
      "inp": 0.5,
      "cls": 0.5,
      "fcp": 0.5,
      "ttfb": 0.5
    }
  ]
}

Ver el desglose RUM

GET /v1/orgs/{org}/zones/{zone}/rum/breakdown

Devuelve las métricas por valor de una dimensión (by), ordenadas por visitas (los empates, por clave).

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 7 días.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
hostconsultastringNoSolo ese nombre. Como mucho 253 caracteres.
pathconsultastringNoSolo esa ruta exacta. Como mucho 512 caracteres. Patrón ^/.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas). Patrón ^[A-Za-z]{2}$.
nodeconsultastringNoSolo las vistas medidas a través de ese nodo. Como mucho 128 caracteres.
deviceconsultastringNoSolo ese tipo de dispositivo. Uno de mobile, tablet, desktop.
connectionconsultastringNoSolo ese tipo de conexión efectiva. Uno de 4g, 3g, 2g, slow-2g.
nav_typeconsultastringNoSolo ese tipo de navegación. Uno de navigate, reload, back-forward, back-forward-cache, prerender, restore.
byconsultastringNoDimensión por la que agrupar. Uno de path, country, node, device, connection, nav_type, host, viewport. Por defecto path.
limitconsultaintegerNoNúmero máximo de elementos. Por defecto 10. De 1 a 100.

Respuesta

CampoTipoDescripción
bystring
rowsarray de object
rows[].keystringValor de la dimensión ("" = desconocido).
rows[].visitsnumber
rows[].metricsRumMetrics

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rum/breakdown?by=country" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "by": "path",
  "rows": [
    {
      "key": "/pricing",
      "visits": 128.0,
      "metrics": {
        "lcp": {},
        "inp": {},
        "cls": {},
        "fcp": {},
        "ttfb": {}
      }
    }
  ]
}

Ver las partes del LCP

GET /v1/orgs/{org}/zones/{zone}/rum/lcp-parts

Divide el LCP en sus partes (TTFB, espera y descarga del recurso y retardo de pintado) para las vistas lentas (LCP igual o superior al p75) y para todas. by añade rows con los 10 dispositivos o rutas con más vistas.

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 7 días.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
hostconsultastringNoSolo ese nombre. Como mucho 253 caracteres.
pathconsultastringNoSolo esa ruta exacta. Como mucho 512 caracteres. Patrón ^/.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas). Patrón ^[A-Za-z]{2}$.
nodeconsultastringNoSolo las vistas medidas a través de ese nodo. Como mucho 128 caracteres.
deviceconsultastringNoSolo ese tipo de dispositivo. Uno de mobile, tablet, desktop.
connectionconsultastringNoSolo ese tipo de conexión efectiva. Uno de 4g, 3g, 2g, slow-2g.
nav_typeconsultastringNoSolo ese tipo de navegación. Uno de navigate, reload, back-forward, back-forward-cache, prerender, restore.
byconsultastringNoAñade rows (10 con más vistas). Uno de device, path.

Respuesta

CampoTipoDescripción
lcp_p75number o null
countinteger
partsRumLcpPartsValuesVistas con LCP ≥ p75.
allRumLcpPartsValues
rowsarray de object
rows[].keystring
rows[].lcp_p75number o null
rows[].countinteger
rows[].partsRumLcpPartsValues

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rum/lcp-parts" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "lcp_p75": 0.5,
  "count": 128,
  "parts": {
    "ttfb": 0.5,
    "load_delay": 0.5,
    "load_duration": 0.5,
    "render_delay": 0.5
  },
  "all": {
    "ttfb": 0.5,
    "load_delay": 0.5,
    "load_duration": 0.5,
    "render_delay": 0.5
  },
  "rows": [
    {
      "key": "/pricing",
      "lcp_p75": 0.5,
      "count": 128,
      "parts": {
        "ttfb": 0.5,
        "load_delay": 0.5,
        "load_duration": 0.5,
        "render_delay": 0.5
      }
    }
  ]
}

Ver los culpables RUM

GET /v1/orgs/{org}/zones/{zone}/rum/offenders

Clasifica los elementos, recursos y scripts con más vistas malas de su métrica (y luego con más vistas), sin la clave vacía. Las claves (selectores, URL) vienen de las páginas de los visitantes.

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 7 días.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
hostconsultastringNoSolo ese nombre. Como mucho 253 caracteres.
pathconsultastringNoSolo esa ruta exacta. Como mucho 512 caracteres. Patrón ^/.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas). Patrón ^[A-Za-z]{2}$.
nodeconsultastringNoSolo las vistas medidas a través de ese nodo. Como mucho 128 caracteres.
deviceconsultastringNoSolo ese tipo de dispositivo. Uno de mobile, tablet, desktop.
connectionconsultastringNoSolo ese tipo de conexión efectiva. Uno de 4g, 3g, 2g, slow-2g.
nav_typeconsultastringNoSolo ese tipo de navegación. Uno de navigate, reload, back-forward, back-forward-cache, prerender, restore.
kindconsultastringSíQué clasificar. Uno de lcp_element, lcp_url, inp_target, inp_script, cls_target.
limitconsultaintegerNoNúmero máximo de elementos. Por defecto 10. De 1 a 100.

Respuesta

  • 200: Devuelve un objeto con los campos de abajo.
CampoTipoDescripción
kindstring
rowsarray de RumOffender

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rum/offenders?kind=lcp_element" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "kind": "example",
  "rows": [
    {
      "key": "/pricing",
      "count": 128,
      "p75": 0.5,
      "poor": 0,
      "top_path": "/docs/"
    }
  ]
}

Ver el informe RUM

GET /v1/orgs/{org}/zones/{zone}/rum/report

Devuelve en una llamada todo lo que muestra la página de rendimiento real del panel, con los ajustes RUM de la zona, el resumen, una serie temporal con paso automático, desgloses por ruta (25 filas), país, nodo, dispositivo y conexión (10 filas), las partes del LCP por dispositivo y los principales culpables. breakdowns.device no aplica el filtro device.

Rol necesario: readonly o superior.

Parámetros

NombreEnTipoObligatorioDescripción
orgrutastring (uuid)SíId de la organización. Cada ruta comprueba que es la del token (si no, 404).
zonerutastring (uuid)SíId de la zona (consulta Listar zonas).
sinceconsultastring (date-time)NoRFC 3339; por defecto until - 7 días.
untilconsultastring (date-time)NoRFC 3339, exclusivo; por defecto ahora. Rango máximo 31 días.
hostconsultastringNoSolo ese nombre. Como mucho 253 caracteres.
pathconsultastringNoSolo esa ruta exacta. Como mucho 512 caracteres. Patrón ^/.
countryconsultastringNoISO 3166-1 alfa-2 (se admite en minúsculas). Patrón ^[A-Za-z]{2}$.
nodeconsultastringNoSolo las vistas medidas a través de ese nodo. Como mucho 128 caracteres.
deviceconsultastringNoSolo ese tipo de dispositivo. Uno de mobile, tablet, desktop.
connectionconsultastringNoSolo ese tipo de conexión efectiva. Uno de 4g, 3g, 2g, slow-2g.
nav_typeconsultastringNoSolo ese tipo de navegación. Uno de navigate, reload, back-forward, back-forward-cache, prerender, restore.

Respuesta

CampoTipoDescripción
summaryRumSummary
timeseriesRumTimeseries
breakdownsobject
breakdowns.pathRumBreakdown
breakdowns.countryRumBreakdown
breakdowns.nodeRumBreakdown
breakdowns.deviceRumBreakdown
breakdowns.connectionRumBreakdown
lcp_partsRumLcpParts
offendersobject
offenders.lcp_elementarray de RumOffender
offenders.inp_targetarray de RumOffender
offenders.inp_scriptarray de RumOffender
offenders.cls_targetarray de RumOffender
settingsZoneEdgeRUM

Errores

EstadoDescripción
400Petición mal formada (bad_request).
404No existe o el token no lo ve (not_found).
503No disponible ahora (unavailable); reinténtalo más tarde.

Ejemplo

curl "https://dash.openwaf.dev/v1/orgs/$OPENWAF_ORG/zones/6f1d2c3b-8a4e-4b7d-9c21-5e3f7a8b9c0d/rum/report" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
200
{
  "summary": {
    "since": "2026-10-27T09:30:00Z",
    "until": "2026-10-27T09:30:00Z",
    "prev_since": "2026-10-27T09:30:00Z",
    "prev_until": "2026-10-27T09:30:00Z",
    "visits": 128.0,
    "prev_visits": 128.0,
    "metrics": {
      "lcp": {
        "p50": 0.5,
        "p75": 0.5,
        "p90": 0.5,
        "count": 128,
        "good": 0,
        "needs_improvement": 0,
        "poor": 0,
        "prev_p75": 0.5,
        "prev_count": 128
      },
      "inp": {
        "p50": 0.5,
        "p75": 0.5,
        "p90": 0.5,
        "count": 128,
        "good": 0,
        "needs_improvement": 0,
        "poor": 0,
        "prev_p75": 0.5,
        "prev_count": 128
      },
      "cls": {
        "p50": 0.5,
        "p75": 0.5,
        "p90": 0.5,
        "count": 128,
        "good": 0,
        "needs_improvement": 0,
        "poor": 0,
        "prev_p75": 0.5,
        "prev_count": 128
      },
      "fcp": {
        "p50": 0.5,
        "p75": 0.5,
        "p90": 0.5,
        "count": 128,
        "good": 0,
        "needs_improvement": 0,
        "poor": 0,
        "prev_p75": 0.5,
        "prev_count": 128
      },
      "ttfb": {
        "p50": 0.5,
        "p75": 0.5,
        "p90": 0.5,
        "count": 128,
        "good": 0,
        "needs_improvement": 0,
        "poor": 0,
        "prev_p75": 0.5,
        "prev_count": 128
      }
    },
    "injection": {
      "injected": 0,
      "csp_nonce": 0,
      "csp_blocked": 0,
      "no_head": 0,
      "sampled_out": 0
    }
  },
  "timeseries": {
    "step": 0,
    "points": [
      {
        "ts": "2026-10-27T09:30:00Z",
        "visits": 128.0,
        "lcp": 0.5,
        "inp": 0.5,
        "cls": 0.5,
        "fcp": 0.5,
        "ttfb": 0.5
      }
    ]
  },
  "breakdowns": {
    "path": {
      "by": "path",
      "rows": [
        {}
      ]
    },
    "country": {
      "by": "path",
      "rows": [
        {}
      ]
    },
    "node": {
      "by": "path",
      "rows": [
        {}
      ]
    },
    "device": {
      "by": "path",
      "rows": [
        {}
      ]
    },
    "connection": {
      "by": "path",
      "rows": [
        {}
      ]
    }
  },
  "lcp_parts": {
    "lcp_p75": 0.5,
    "count": 128,
    "parts": {
      "ttfb": 0.5,
      "load_delay": 0.5,
      "load_duration": 0.5,
      "render_delay": 0.5
    },
    "all": {
      "ttfb": 0.5,
      "load_delay": 0.5,
      "load_duration": 0.5,
      "render_delay": 0.5
    },
    "rows": [
      {
        "key": "/pricing",
        "lcp_p75": 0.5,
        "count": 128,
        "parts": {}
      }
    ]
  },
  "offenders": {
    "lcp_element": [
      {
        "key": "/pricing",
        "count": 128,
        "p75": 0.5,
        "poor": 0,
        "top_path": "/docs/"
      }
    ],
    "inp_target": [
      {
        "key": "/pricing",
        "count": 128,
        "p75": 0.5,
        "poor": 0,
        "top_path": "/docs/"
      }
    ],
    "inp_script": [
      {
        "key": "/pricing",
        "count": 128,
        "p75": 0.5,
        "poor": 0,
        "top_path": "/docs/"
      }
    ],
    "cls_target": [
      {
        "key": "/pricing",
        "count": 128,
        "p75": 0.5,
        "poor": 0,
        "top_path": "/docs/"
      }
    ]
  },
  "settings": {
    "enabled": false,
    "sample_rate": 1,
    "exclude_paths": []
  }
}

Última actualización:

↑↓ para moverte↵ para abriresc para cerrar