Homeโ€บ๐Ÿ“Š Track 3: Monitor & Alertโ€บModule 122 min read ยท 13/21

Synthetic & RUM

Tutorial

Synthetic & RUM

Synthetic monitors check availability from outside. RUM (Real User Monitoring) captures actual user experience from browsers and mobile apps.

Synthetic Monitoring

HTTP Monitors

Simple availability checks โ€” hit a URL, check the response:

What They Check                         Frequency
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
URL returns HTTP 200                    Every 1-5 minutes
Response time under threshold           From multiple locations
Response body contains expected text    24/7, even when no users
SSL certificate validity                Detects outages before users

๐Ÿ›  Try it: Ctrl+K โ†’ "Synthetic" โ†’ Create HTTP monitor โ†’ Enter your website URL โ†’ Select locations โ†’ Save. You'll see availability data within minutes.

Browser Monitors (Clickpaths)

Simulate real user journeys โ€” login, search, checkout:

  • Record a clickpath in the Dynatrace recorder
  • Runs on Chromium from selected locations
  • Captures screenshots, response times, errors at each step
  • Alerts if any step fails or exceeds time threshold

Real User Monitoring (RUM)

RUM captures data from actual users visiting your application:

What RUM Captures                       How
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Page load times                         OneAgent injects JavaScript
User actions (clicks, scrolls)          Automatic instrumentation
JavaScript errors                       Captured in real-time
User sessions                           Tracked across pages
Core Web Vitals (LCP, FID, CLS)         Browser performance metrics
Geographic distribution                 User location from IP

RUM is enabled automatically when OneAgent is installed in full-stack mode and serves web pages.

Querying Synthetic & RUM Data

// Synthetic monitor results
fetch dt.entity.http_check
| fields entity.name, id

// User sessions (if RUM is configured)
fetch user.sessions
| summarize count=count()

// User actions
fetch user.events
| fields timestamp, type, name
| limit 10

Synthetic vs RUM

Synthetic                               RUM
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Simulated users from fixed locations    Real users from everywhere
Runs 24/7 even with zero traffic        Only when users visit
Detects outages proactively             Shows actual user experience
Consistent baseline for comparison      Varies by device, network, location

๐Ÿ’ก Use both: Synthetic for availability SLOs (consistent, 24/7), RUM for user experience insights (real-world performance).

New RUM DQL Patterns

// Core Web Vitals โ€” LCP P75 timeseries
timeseries LCP = percentile(dt.frontend.web.page.largest_contentful_paint, 75)

// Top clicked elements
fetch user.events
| filter characteristics.has_user_interaction AND in(interaction.name, {"click", "touch"})
| summarize clicks = count(), by:{ui_element.resolved_name}
| sort clicks desc

// Error events
fetch user.events
| filter characteristics.has_error == true
| fields timestamp, page.name, error.message, error.type
| sort timestamp desc

// Most visited pages
fetch user.events
| filter characteristics.has_navigation == true
| summarize sessions = countDistinct(dt.rum.session.id), by:{page.detected_name}
| sort sessions desc

Session Replay Privacy

  • All input fields masked by default (privacy-by-default)
  • 3 masking levels: mask all, mask user input, allow all
  • Per-element control: CSS class dtrum-mask or dtrum-unmask
  • Permissions: replay-sessions-with-masking (masked) vs replay-sessions-without-masking (full)