Drop the EEOS RUM beacon onto any page. It captures Core Web Vitals with element-level attribution, masked session replay, frustration signals, and stitches the browser session to your backend traces — all from a single ~30 KB self-contained script that never throws into your page.
<script async src="https://rum.eeos.witos.ai/eeos-rum.js" data-eeos-key="INGEST_KEY" data-eeos-env="prod" data-eeos-sink="https://64.225.25.44:8780"></script>
Replace INGEST_KEY with your sink ingest key.
That is the whole integration — no build step, no separate config file.
web-vitals and
rrweb load lazily from a pinned CDN at runtime.
LCP, INP, CLS, TTFB, FCP with attribution (LCP element, INP target) plus nav timing & page-load.
rrweb session replay with mandatory masking — inputs masked, password/cc/ssn blocked, URLs scrubbed. Nothing sensitive leaves the browser.
Rage clicks, dead clicks, JS errors, slow resources, and SPA route changes — batched to the sink.
W3C traceparent injected on first-party fetch(); the root trace id links the session to backend spans.
Set on the <script> tag. The
data-eeos-* namespace is canonical;
bare data-* is accepted for backward compatibility.
| Attribute | Default | Meaning |
|---|---|---|
data-eeos-key | — | Sink ingest key (X-API-Key). Required. |
data-eeos-sink | <src host>:8780 | Sink base URL. |
data-eeos-env | prod | Deployment environment label. |
data-eeos-route | location.pathname | Logical route label. |
data-eeos-cohort | default | Cohort tag. |
data-eeos-region | null | Region tag. |
data-eeos-replay | on | Session replay (masking always on). |
data-eeos-replay-sample-rate | 1.0 | 0..1 replay sampling. |
data-eeos-debug | off | Console logging. |
maskAllInputs,
text masked in [data-pii] / .ssn /
.mrn / common sensitive selectors, password & cc/ssn inputs blocked,
query strings stripped from URLs. Add .eeos-mask /
.eeos-block / .eeos-ignore to extend it.