Upgrade from classic RUM metrics to Grail Dynatrace Classic Upgrade guide 5-min read Updated on Sep 15, 2026 RUM provides numerous built-in metrics on Grail with the prefix dt.frontend, so you can smoothly transition to Latest Dynatrace .
Why upgrade? Full power of Grail : Upgrading your queries lets you use RUM metrics on Grail in Notebooks , Dashboards , and other Dynatrace apps .Advanced query capabilities : Metrics on Grail use DQL, which lets you filter, aggregate, join, and transform data in a single query.What will you do? Look up your Classic RUM metric key and find its replacement. Update your queries to use the replacement Grail metric. Before you begin Prerequisites Prior knowledge How to upgrade To convert a Classic RUM metric key:
Find your Classic RUM metric key in the metric key reference below. Note its Grail equivalent. Write a DQL query that uses the relevant Grail metric key. Metric key reference Since Real User Monitoring (RUM) uses a different data model than RUM Classic, there are no direct equivalents for RUM Classic metrics , which use the prefix builtin:apps.
However, many metrics have replacements that serve an analogous purpose, as listed in the table below.
Note that metrics with the prefix builtin:apps that do not appear in the table have no replacement.
For information about metric mapping, see New concepts .
Differences in metric values between the builtin:apps metrics and their replacements are expected and result from underlying data model changes.
The table below uses wildcards to group Classic metrics.
For example, builtin:apps.web.actionDuration.* refers to:
builtin:apps.web.actionDuration.custom.browser,builtin:apps.web.actionDuration.load.browser, andbuiltin:apps.web.actionDuration.xhr.browser.builtin:apps.web.actionCount.*builtin:apps.other.uaCount.*dt.frontend.user_action.count
builtin:apps.web.actionDuration.*builtin:apps.other.uaDuration.*dt.frontend.user_action.duration
builtin:apps.other.crashCount.*builtin:apps.web.countOfErrors*builtin:apps.web.jsErrors*builtin:apps.other.requestErrorCount.*builtin:apps.web.countOfStandaloneErrorsbuiltin:apps.mobile.reportedErrorCountdt.frontend.error.count
builtin:apps.other.requestErrorRate.*
dt.frontend.error.countdt.frontend.request.countbuiltin:apps.web.cumulativeLayoutShift.load.*
dt.frontend.web.page.cumulative_layout_shift
builtin:apps.web.domInteractive.load.*
dt.frontend.web.navigation.dom_interactive
builtin:apps.web.firstInputDelay.load.*
dt.frontend.web.page.first_input_delay
builtin:apps.web.interactionToNextPaint
dt.frontend.web.page.interaction_to_next_paint
builtin:apps.web.largestContentfulPaint.load.*
dt.frontend.web.page.largest_contentful_paint
builtin:apps.web.loadEventEnd.*
dt.frontend.web.navigation.load_event_end
builtin:apps.other.requestCount.*
dt.frontend.request.count
builtin:apps.other.requestTimes.*
dt.frontend.request.duration
builtin:apps.web.activeSessionsbuiltin:apps.mobile.sessionCountbuiltin:apps.other.sessionCount.*dt.frontend.session.active.estimated_count
builtin:apps.web.firstByte.load.*
dt.frontend.web.navigation.time_to_first_byte
builtin:apps.other.userCount.*builtin:apps.web.activeUsersEstdt.frontend.user.active.estimated_count