The RUM JavaScript has a built-in Health check.
On Version 1.337 or lower it can be invoked by calling
dynatrace.runHealthcheck();
On Version 1.339 and higher it can be invoked by calling
await dynatrace.loadDebugTools();
dynatrace.debugtools.runHealthcheck();
The output looks like this:

Findings have a severity assigned and are grouped by severity:
| Level | Meaning |
|---|---|
❌ ERROR |
A feature is completely broken with no usable fallback, AND the user can fix it — typically by correcting their configuration or addressing a runtime error in their integration. Immediate attention recommended. |
⚠️ WARNING |
Something unexpected happened and data is being silently lost, or a feature is degraded but falls back to a reasonable default. The user may not notice without actively checking, but monitoring quality is affected. Any form of data drop — rate limiting, size limits, off state, browser limitations, or a discarded user action — belongs here. |
ℹ️ INFO |
A normal operational event useful for diagnosing behavior. No data is lost and no action is required. These messages describe expected lifecycle transitions (e.g. sessions starting, config versions loading, injection format detection). |
🔎 VERBOSE |
Fine-grained trace-level events primarily useful for debugging internals. High-frequency details that are too noisy for routine monitoring but valuable when investigating a specific issue. |
An internal Health check threw an unexpected error while running. The affected check produced no results.
Possible Causes:
Mitigation:
The RUM JavaScript received an HTTP error response from the beacon endpoint.
Possible Causes:
Mitigation:
The Health check detected that the response to a beacon request was invalid. The response is expected to be a proper JSON.
Possible Causes:
Mitigation:
If both RUM Classic and RUM are active, RUM will also be disabled when setting cookies is not possible.
Possible Causes:
document.cookie writes and drops cookies matching certain name patterns.Mitigation:
shareCrossOriginFrameInfo configurationThe shareCrossOriginFrameInfo configuration contains an origin value that is not valid. Cross-frame communication will not work correctly.
Mitigation:
shareCrossOriginFrameInfo configuration in the application settings.https://example.com (scheme + host, no trailing slash).A RUM JavaScript feature module threw an error during its initialization phase. The affected feature will not be active, which may mean certain types of RUM data (e.g., resource timings, errors, or user actions) are not collected.
Possible Causes:
Mitigation:
When the RUM JavaScript receives an unsupported response code, this message will be shown.
Possible Causes:
Mitigation:
An attempt was made to write the cookie with the specified name, but after immediately reading it back, it was no longer available.
The severity reflects whether cookie storage is required for the current configuration:
Possible Causes:
document.cookie writes and drops cookies matching certain name patterns.SameSite attribute is not configured correctly.Mitigation:
document.cookie and prevents writing cookies.SameSite attribute is configured correctly.A test cookie was written and read back immediately, but the value stored in document.cookie differed from the value that was written. The expected and actual values are both shown in the message.
The severity reflects whether cookie storage is required for the current configuration (see Cookie could not be set for the full explanation).
Possible Causes:
Mitigation:
document.cookie and transform values on write or read.The test cookie was written and present immediately after the write, but when checked again after 500 ms the cookie had disappeared. This indicates that something is deleting cookies after they are set, not that the initial write failed.
The severity reflects whether cookie storage is required for the current configuration (see Cookie could not be set for the full explanation).
Possible Causes:
Mitigation:
The test cookie was written and present immediately after writing, but when checked again after 500 ms the cookie value had changed. The expected and actual values are both shown in the message.
The severity reflects whether cookie storage is required for the current configuration (see Cookie could not be set for the full explanation).
Possible Causes:
Mitigation:
Accessing document.cookie threw a JavaScript exception. The error message is included in the finding. This will prevent features like session and user tracking from working.
Possible Causes:
allow-same-origin attribute missing, which disables cookie access.document.cookie with an implementation that throws on access.Mitigation:
allow-same-origin sandbox attribute set.document.cookie getter or setter with an implementation that throws errors.An event-sending gate is active and blocking events from being dispatched. The message describes the active blocking condition:
cookies are disabled or blocked (mixed mode) — cookie gate is active (❌ ERROR).consent not granted — user has not granted consent or has opted out (ℹ️ INFO).off state active, reason: …, ~Xs remaining — the agent entered the off state after repeated beacon failures (⚠️ WARNING).server dynamic config is DISABLED — server-side config has disabled the agent (⚠️ WARNING).Low-priority events are not sent: server dynamic config is PRIORITY_HIGH — only high-priority events are sent (⚠️ WARNING).Mitigation:
There are dependencies between modules (e.g. the XHR module [X] depends on the Resourcetiming module [R]) and there are required dependencies and optional dependencies. If a required dependency is missing, a module is unable to be enabled and the RUM JavaScript will make this known with this error message.
Possible Causes: There can be multiple reasons for this:
ruxitagentjs_ICA_1234.js) and replace the featurehash with the featurehash of the module in question (if e.g. the module R is missing, it would be ruxitagentjs_R_1234.js. CASE MATTERS!). If the returned JavaScript code is empty or mangled, then there is an issue.Mitigation:
R module) and if not, enable it in the settings or check if there is a caching issue.A module could not be enabled because one or more of its required dependencies are present in the feature hash but failed to activate at runtime.
Possible Causes:
Mitigation:
The Health check is able to run some tests about the basic functionality of certain functions. The MDN contains a specification of the APIs browsers have to provide and how they have to behave.
The RUM JavaScript has some tests to verify that this works correctly (e.g. if reverse is called on an Array, will it properly reverse? If an element is added to a Map, is it possible to retrieve it at a later point again). If this finding is shown, then the implementation of those functions is not correct and the RUM JavaScript will not function correctly.
Possible Causes:
Mitigation: The only way to fix it is to fix the webpage by making sure the APIs behave as specified in the MDN.
A test request using fetch did not complete within the allowed timeout. This indicates that the fetch implementation on the page may not be working correctly.
Possible Causes:
fetch with an implementation that does not resolve promises correctly.Mitigation:
fetch-related overrides or wrappers (Fetch wrapper detected on the page).fetch behaves according to the specification on this page.A test using XMLHttpRequest did not complete within the allowed timeout. This indicates that the XMLHttpRequest implementation on the page may not be working correctly.
Possible Causes:
XMLHttpRequest with an implementation that does not fire events or callbacks correctly.Mitigation:
XMLHttpRequest behaves according to the specification on this page.A DOM element on the page uses an ID that is reserved by the RUM JavaScript. This will cause functionality issues. The reserved IDs are:
dynatracedT_dtrumDT_RUMMitigation:
Rejected Promises are not being caught. This is abnormal browser behavior, typically caused by zone.js interference with the Promise implementation.
Mitigation:
Promises on this page..catch() or try/catch in async functions.The number of events generated in the current minute exceeded the configured per-minute rate limit. Events above the limit were dropped and will not be sent.
Possible Causes:
Mitigation:
The beacon endpoint responded with HTTP 405 or a Retry-After header, and the agent has temporarily suppressed beacon sending for the affected frontend.
Possible Causes:
Mitigation:
A <form> element on the page contains child elements (e.g., <input>, <select>) whose name or id attributes match native HTMLFormElement property names. This causes those native properties to be shadowed, which can prevent the RUM JavaScript from correctly reading form data.
Example: <input name="action"> inside a form overrides form.action
Mitigation:
The currently used RUM JavaScript injection mode is not supported.
Possible Causes:
Mitigation:
MutationObserver has been replaced by a third-party library other than zone.js. This may cause the RUM JavaScript to miss DOM changes.
Mitigation:
MutationObserver.The MutationObserver API has been wrapped by zone.js (commonly used with Angular). The RUM JavaScript detects this via the presence of __zone_symbol__OriginalDelegate or similar zone.js markers.
Mitigation:
MutationObserver from patching.Function.prototype.toString() is overriddenFunction.prototype.toString has been replaced on this page. The override check uses this method to detect native vs. wrapped functions, so its results may be unreliable.
Possible Causes:
Function.prototype.toString function.Mitigation:
Function.prototype.toString if possible.<name> was not found by the override check - not supported by this browser or removedThe function was not present in the browser environment. It may not be supported by this browser version, or it may have been deleted by a third-party script.
Mitigation:
The RUM JavaScript detected that the function or object <XYZ> is no longer a native implementation. There are five variants of this message:
"<XYZ>" is overridden - may affect RUM functionality or data quality. (❌ ERROR)
Something other than the RUM JavaScript has overridden a function that the RUM JavaScript actively uses, and the RUM JavaScript's tests confirmed the override does not behave as expected. This can lead to broken functionality or silent data loss.
"<XYZ>" is overridden and re-wrapped after RUM JavaScript. (⚠️ WARNING)
The RUM JavaScript overrides this function for monitoring purposes, but something on the page has wrapped it again afterward. Data quality may be affected.
"<XYZ>" is overridden. RUM JavaScript would use it if modules (<modules>) are enabled. (⚠️ WARNING)
The RUM JavaScript overrides this function in the listed modules, but those modules are not currently active. The override has no effect at the moment.
"<XYZ>" is overridden but behaves as expected according to our tests. (ℹ️ INFO)
Something other than the RUM JavaScript has overridden the function, but the RUM JavaScript's built-in tests confirm the wrapped version still behaves correctly. No action required.
"<XYZ>" is overridden but not used by any active module. (ℹ️ INFO)
The function is overridden by a third party, but no currently active RUM JavaScript module relies on it. No data quality impact expected.
Mitigation: If you get the ❌ ERROR message, you can expand the object below the table to get more information. You expand the "details" of the entry and then it will show "function" and either "classic", "rumOnGrail" or both. If you expand those properties further, you can see where the implementation is, if it is not the native implementation. There might be some incompatibility between the custom implementation and what the official spec for the implementation states/what the RUM JavaScript expects.
Example:
clearInterval as being overridden."clearInterval" is overridden finding.clearInterval function. If you click on the [[FunctionLocation]] link, you can see the implementation. In case there is another wrapper on the page, one of those [[FunctionLocation]] links will link to the custom implementation (which value links to the custom code, depends on the injection order/script execution order).<name> cannot be inspected - its toString & generic toString methods are overridden or missingThe override check cannot determine whether this function is native because both its own toString and Function.prototype.toString are overridden or unavailable.
Mitigation:
Function.prototype.toString if possible.<name> is augmented on this page by [Sentry]Sentry's SDK has modified this function. Sentry and the RUM JavaScript both instrument certain browser APIs; running both simultaneously can affect data quality.
Mitigation:
<name> was wrapped before RUM JavaScript - may affect RUM functionality or data qualityA third-party library wrapped the function before the RUM JavaScript loaded, and the wrapper may interfere with the RUM JavaScript's ability to collect accurate data.
Mitigation:
The RUM JavaScript's internal unwrapped fetch reference and the current globalThis.fetch are different objects, which means something on the page has wrapped fetch after the RUM JavaScript loaded.
Possible Causes:
fetch after the RUM JavaScript initialized.Mitigation:
fetch. If it is the RUM JavaScript's own fetch module, this finding is expected and can be ignored.The <script> tag used to load the RUM JavaScript has an id attribute. This is not supported and may cause unexpected behavior.
Mitigation:
id attribute from the RUM JavaScript's <script> tag.The standalone Health check detected that the function <name> is not a native implementation. Since no RUM JavaScript agent is present to account for its own wrapping, any override is likely from a third-party library and may affect RUM data quality if the agent is later injected.
Mitigation:
zone.js is causing handled Promise rejections (those inside try/catch blocks) to still be logged as unhandled. This is not the normal browser behavior and can cause false-positive unhandled rejection reports in the console and in the RUM JavaScript's error collection.
Mitigation:
This shows the version of the JavaScript Agent that is currently running. This is the version of the RUM JavaScript that can also be seen in the WebUI.
This shows the currently active config in the RUM JavaScript. Expand the details, to see the full config.
A request with the URL <url> was ignored due to a request exclusion rule. This means it will not be reported or visible in the user.events table. This is a manual config, so most likely intended.
Mitigation: If this was not intended:
All event-sending gates are open and no rate-limiting or retry suppression is active. This is the expected healthy state.
<name> was wrapped before RUM JavaScript but behaves as expected according to our testsA third-party library wrapped the function before the RUM JavaScript loaded, but the RUM JavaScript's tests confirm the wrapped version behaves correctly. Data quality should not be affected.
Mitigation:
The function or object <name> has been wrapped or replaced by the RUM JavaScript for monitoring purposes (e.g. to intercept XHR, fetch, or setTimeout calls). This is expected and informational only.
The Health check tried to locate the RUM JavaScript <script> element in the DOM to check its id attribute, but no matching script was found.
Possible Causes:
<script src="..."> tag.<script> element was removed from the DOM after the agent loaded.document.currentScript and related APIs are unavailable.Mitigation:
The standalone Health check snippet is running independently (without a full RUM JavaScript agent on the page). This finding reports the version of the standalone snippet that is executing.
The override check determined that <name> is a native implementation. Shown only in verbose/detailed mode.
A native functionality test for <name> passed. Shown only in verbose/detailed mode.
There are things the RUM JavaScript encounters and reports back as Selfmonitoring Events. These findings are also presented.
These are the codes and what they mean/can be done to fix the issue.
The RUM JavaScript sent a beacon to the Dynatrace server but received no response at all. This may be a network-level failure (request blocked, dropped, or timed out before a response was returned).
Possible Causes:
Mitigation:
The agent received a response from the server, but the response body was not in the expected format and could not be parsed.
Possible Causes:
Mitigation:
The RUM JavaScript encountered an unexpected error. The error in question does not have a separate error code (yet).
Mitigation:
In order to access the battery level, the RUM JavaScript needs to access navigator.getBattery(). Access to this API can be forbidden using the Permissions-Policy header, which would lead to error 1003 in the RUM JavaScript.
Mitigation:
navigator.getBattery() is not forbidden using a Permissions-Policy header.The RUM JavaScript tried to send a beacon to the beacon endpoint multiple times but all attempts failed. The agent enters an off state for up to 2 hours and stops sending beacons during that period.
Possible Causes:
Mitigation:
An internal RUM JavaScript listener threw while it was being notified about an event or a state change. The listeners still waiting to be notified about that same event were skipped, so some data may be missing or incomplete. Data collection recovers for subsequent events. The exception is not suppressed, so it is also visible in the browser console.
Possible Causes:
Mitigation:
This shows the currently used config version. This can be used to make sure the RUM JavaScript is running with the newest version.
This shows the config version of the config stored in window.localStorage. This can be used to make sure the RUM JavaScript has the newest version of the config stored.
This indicates that the RUM JavaScript received a config update from the beacon endpoint. The message contains more information about the config version.
Mitigation:
Describes how the RUM JavaScript was injected into the page. Possible values include:
"Inline Code": RUM JavaScript was injected as an inline script."JavaScript tag": the RUM JavaScript was loaded as a standalone JS tag."OneAgent JavaScript tag": the RUM JavaScript was injected by the Dynatrace OneAgent."Unknown": the injection method could not be determined.The agent detected that XMLHttpRequest was already wrapped or replaced before the agent loaded. The agent will still attempt to instrument XMLHttpRequest, but data quality or functionality may be affected.
Possible Causes: Some other JavaScript on the page overrides the native functionality. This commonly happens when other RUM solutions or request frameworks are included on the page.
Mitigation: This is not necessarily an issue, but can lead to broken behavior, if the custom implementation of XMLHttpRequest does not behave like the native implementation. If the application works as expected, this can be ignored. Things to try if the application functionality is affected:
Possible Causes: There are multiple reasons why data needs to be discarded:
Mitigation:
eventModifiers. Check your code and make sure the size of an event does not exceed the limit of 256 KiB.This is shown when the browser does not support a certain feature and the RUM JavaScript will not be able to collect data from it.
Mitigation:
This indicates that the RUM JavaScript received a config update from the beacon endpoint when the first beacon was sent. The message contains more information about the config version.
Mitigation:
When the Cross Origin Frame Info sharing feature is used, the RUM JavaScript is passing messages between the different iframes to determine a common page.instance_id. If the frame in charge is unloaded, this finding is shown.
The routine "current frame is unloading" case is reported as Info. The case where the earliest frame being relied upon was disposed or is no longer accessible is reported as Warning, because tab states and visibility change events may be inaccurate for a short time afterward.
Mitigation:
Cross Origin Frame Info sharing feature is turned on.page.instance_id, but during the brief transition, some information on events may be temporarily inaccurate.When the Cross Origin Frame Info sharing feature is used, the RUM JavaScript is passing messages between the different iframes to determine a common page.instance_id. It takes some time for the page.instance_id to stabilize, and therefore some data on already created events has to be updated. This finding is showing that this has happened, to make it clear that some values might not be accurate.
Mitigation:
page.instance_id values.A configuration value was outside the acceptable range or was not a valid number (object, boolean, NaN, etc.). The RUM JavaScript clamped it to the allowed minimum/maximum or applied the default value. The message includes the config key and the problematic value.
Mitigation:
A user action was in progress when the user actions module was unloaded. The action was discarded rather than completed or sent. This happens when the module is disabled remotely via a config update while the user is interacting with the page.
A user action was in progress when consent was revoked. The action was discarded to respect the user's consent decision. No data from the in-progress action is sent to the beacon endpoint.
The RUM JavaScript could not automatically determine a suitable cookie domain for the current hostname. The agent enters the off state because session and visitor tracking cannot work without a cookie domain.
Mitigation:
The RUM JavaScript detected a Dynatrace cookie that existed multiple times.
Possible Causes:
.example.com and app.example.com).Mitigation:
path=/ attribute, any other value is not coming from Dynatrace components.The config for capturing event_properties is invalid or contains invalid entries.
The config for capturing event_properties received from the server could not be parsed or contained an unrecognized format. Capturing may be partially or fully disabled.
Possible Causes:
Mitigation:
The RUM JavaScript intercepted a User Interaction with a timestamp of 0. This will affect the accuracy of user action timing.
Possible Causes:
Mitigation:
new Event() without timestamps. Check if this is the case and make sure a timestamp is part of the event.new Event(...) without a timestamp will always have this issue. Consider using new MouseEvent(...) or similar constructors that set timestamps automatically.The RUM JavaScript read an existing cookie but could not parse its content.
Possible Causes:
Mitigation:
Reading from document.cookie or writing to document.cookie failed. On write failures the agent additionally enters the off state, because session and visitor tracking cannot work without cookie access.
Mitigation:
The config describing which events extend the session duration is invalid.
Mitigation:
A configuration value that should be a regular expression (e.g., for URL exclusion rules) could not be parsed as a valid regex. The message contains the name of the configuration key that failed.
Mitigation:
Reading from/Writing to localStorage/sessionStorage failed.
Possible Causes:
Mitigation:
The cookieDomain value configured in Dynatrace is not valid for the current page's hostname. The RUM JavaScript fell back to an automatically detected domain.
Possible Causes:
Mitigation:
A new session was started. The reason indicates what caused the previous session to end. Common reasons include session timeout, navigation, or no existing session cookie found.
Indicates how the current user ID was established. Common reasons include an existing user cookie being loaded, an rxVisitor cookie being adopted from RUM Classic or another frontend, or a new user ID being created because no existing user cookie was found.
The RUM JavaScript SDK and the RUM JavaScript agent are running with incompatible versions. The message contains details about the mismatch, including the reason and the versions involved.
Possible Causes:
@dynatrace/rum-javascript-sdk) used to build the application is a different version than the RUM JavaScript agent loaded at runtime.Mitigation:
Beacons are held back until the mobile agent controlling the web view in a hybrid scenario allows the RUM JavaScript to send them.