Glossary
Glossary

What Is Real User Monitoring (RUM)?

By Sazabi Team

Last verified on Nov 8, 2026.

Real user monitoring (RUM) measures how your website or app performs for the people actually using it. A script in the page, or an SDK in the app, records timings and errors in each visitor's browser and reports them to a collector. MDN describes it as measuring page performance from real users' machines, and web.dev says RUM data and field data are the same thing.

How RUM Works

Typically a small script is added to each page. As people use the site, their browsers report back what they experienced: page load timings, resource timings, errors, and usually some session context. MDN notes that RUM captures real usage regardless of device, browser, network, or location, and monitors actual use cases rather than the paths an engineer or product manager assumed.

The data comes from standard browser APIs. The Navigation Timing specification from the W3C defines an interface for complete timing information about a document's navigation, and PerformanceNavigationTiming is how you read it. MDN points to that interface and PerformanceResourceTiming as the main starting points for building your own collector. A minimal example:

const [nav] = performance.getEntriesByType('navigation')
navigator.sendBeacon(
  '/rum',
  JSON.stringify({
    page: location.pathname,
    interactive: nav.domInteractive,
    load: nav.loadEventEnd,
  })
)

Most teams use a library or a vendor client instead of hand-rolled code. AWS's CloudWatch RUM, for instance, collects client-side data from actual user sessions for web and mobile apps, samples a percentage of sessions that you choose, and breaks results down by device type and operating system.

Core Web Vitals in the Field

The best-known RUM metrics are the Core Web Vitals. web.dev defines them as:

MetricMeasuresGood threshold
LCP (Largest Contentful Paint)Loading2.5 seconds or less
INP (Interaction to Next Paint)Interactivity200 milliseconds or less
CLS (Cumulative Layout Shift)Visual stability0.1 or less

A page passes when it meets all three at the 75th percentile of page loads, segmented across mobile and desktop. web.dev's field measurement guidance adds that you should use percentiles and not averages, report a distribution, and avoid tracking more than you need, because measurement itself can hurt performance. Its web-vitals JavaScript library is the usual way to collect them. For the monitoring side, see the guide on web vitals regressions.

What RUM Is Good At

  • Seeing the long tail. Field data is a distribution. Some visitors load fast and others slowly, and RUM shows the spread.
  • Segmenting. Break results out by browser, device, country, or release.
  • Proving a fix worked. After a change, the 75th percentile either moves or it does not.
  • Finding what you did not script. Users take paths nobody wrote a test for.

What RUM Is Not

It needs traffic. A page nobody visited at 3 a.m. produces no data, so RUM will not tell you the site is down overnight. MDN also points out RUM is more expensive and less convenient than synthetic testing. And it is noisier: differences between visitors mean one number rarely tells the story. web.dev's guide on lab and field differences covers why numbers from lab tools and field tools disagree. Synthetic monitoring fills that gap, and APM covers what happens on the server.

RUM, Errors, and Privacy

A RUM collector sees real people's sessions, so decide up front what it sends. AWS's client lets you sample a percentage of sessions, and web.dev advises against tracking more than you need. The guide on client errors covers browser exceptions, which most RUM tools also report.

Frontend Telemetry in Sazabi

Sazabi is an AI-native observability and security platform. Sazabi's Browser and React Native SDKs capture errors, console output, network calls with trace context, user interactions, navigation and session identity from web and mobile apps. They do not capture Core Web Vitals or session replay. Read about frontend breakage and client errors for what it surfaces from browser errors. For how page speed shows up on the server side, see latency spikes.

Frequently Asked Questions

What is real user monitoring?

Measuring performance and errors from the browsers or apps of the people who actually use your site, as they use it. A small script in the page records timings and reports them back.

What is the difference between RUM and synthetic monitoring?

RUM measures real sessions across every device, network, and location, so it shows what users experience. Synthetic monitoring runs scripted tests from fixed locations, so it works without traffic and gives consistent baselines. They answer different questions.

What are Core Web Vitals and how are they measured?

Core Web Vitals are LCP, INP, and CLS, which measure loading, interactivity, and visual stability. Google recommends measuring them in the field at the 75th percentile of page loads, with targets of 2.5 seconds, 200 milliseconds, and 0.1.

Is field data the same as RUM data?

Yes. web.dev says field data is commonly known as RUM data and that the two terms are interchangeable.

Sources

  1. RUM measures page performance from real users' machines, usually via an injected script, captures actual users regardless of device, browser, network, or location, and is costlier than synthetic monitoring; the performance APIs to roll your own (accessed Nov 8, 2026)
  2. Field data is gathered from all visiting users and is also known as RUM data; it is a distribution, not one number (accessed Nov 8, 2026)
  3. Core Web Vitals are LCP within 2.5 seconds, INP of 200 milliseconds or less, and CLS of 0.1 or less, assessed at the 75th percentile of page loads across mobile and desktop (accessed Nov 8, 2026)
  4. Rely on percentiles instead of averages, report a distribution, use the web-vitals library, and do not track more than you need so that measurement does not affect performance (accessed Nov 8, 2026)
  5. PerformanceNavigationTiming exposes metrics on a document's navigation events, such as how long it takes to load a document (accessed Nov 8, 2026)
  6. Performance.getEntriesByType returns the performance timeline entries of a given type, in chronological order (accessed Nov 8, 2026)
  7. navigator.sendBeacon asynchronously sends a small HTTP POST, intended for analytics data (accessed Nov 8, 2026)
  8. The Navigation Timing specification defines an interface for web applications to access complete timing information for the navigation of a document (accessed Nov 8, 2026)
  9. CloudWatch RUM collects client-side data from actual user sessions, samples a configurable percentage of sessions, and breaks data down by device type and operating system (accessed Nov 8, 2026)
  10. Sazabi Browser and React Native SDKs capture errors, console output, network calls, interactions, navigation, and session identity (accessed Nov 8, 2026)