Concepts

Synthetic Monitoring and Real User Monitoring Do Different Jobs

Monty31 Ara 2024 4 dk okuma

These two get compared as alternatives when they answer genuinely different questions. Understanding the difference clarifies why a team can have excellent synthetic monitoring and still be blindsided by a performance problem affecting half their users.

Synthetic monitoring

A machine you control performs a scripted interaction on a schedule, from a location you choose. It is deterministic, which makes it excellent for detecting change. It works with zero traffic — at 4am when nobody is using your product, it is still checking. It covers paths nobody has hit yet. Its blind spot is everything you did not script, and it tests from clean, fast, well-connected machines, which is not what your users have.

Real user monitoring

Instrumentation in your actual application reports what actual users experienced. It is representative: real devices, real networks, real geography. It covers everything, not just what you scripted. It reveals distribution — not "the page loads in 800ms" but "800ms at the median and 6 seconds at p95." Its blind spot is the absence of traffic: no users, no data, and a total outage produces silence indistinguishable from a quiet period.

What each one catches that the other misses

Synthetic catches a total outage at 4am, an expired certificate, a broken deploy on a path with no current traffic. RUM catches a regression that only affects Safari, a third-party script slowing one country, a checkout that works but takes eleven seconds on mobile. There is essentially no overlap, which is the argument for both.

How they combine

Use synthetic for availability alerting — it works during outages and has clean pass/fail semantics. Use RUM for performance and experience work. The pattern that catches the most is checking synthetic when RUM shows a problem, and checking RUM when synthetic shows nothing but users are complaining.

Scripting synthetic checks that mean something

If you only script one thing, script the transaction that makes you money. Use a dedicated test account, do not create real side effects, assert on content rather than just status codes, and check from more than one location if your users are spread out.

Where to start

If you have neither, start with synthetic — it is faster to set up and gives you the availability alerting that wakes someone up. Add RUM when you start asking questions synthetic cannot answer.

Monty