EEOS · Web APM

Real-user monitoring in one line.

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.

Install

<head> · one-line drop-in
<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.

Captured signals

Core Web Vitals

LCP, INP, CLS, TTFB, FCP with attribution (LCP element, INP target) plus nav timing & page-load.

LCPINP CLSTTFB FCP

🎥Masked replay

rrweb session replay with mandatory masking — inputs masked, password/cc/ssn blocked, URLs scrubbed. Nothing sensitive leaves the browser.

🔥Frustration signals

Rage clicks, dead clicks, JS errors, slow resources, and SPA route changes — batched to the sink.

🔗Trace stitching

W3C traceparent injected on first-party fetch(); the root trace id links the session to backend spans.

Configuration

Set on the <script> tag. The data-eeos-* namespace is canonical; bare data-* is accepted for backward compatibility.

AttributeDefaultMeaning
data-eeos-keySink ingest key (X-API-Key). Required.
data-eeos-sink<src host>:8780Sink base URL.
data-eeos-envprodDeployment environment label.
data-eeos-routelocation.pathnameLogical route label.
data-eeos-cohortdefaultCohort tag.
data-eeos-regionnullRegion tag.
data-eeos-replayonSession replay (masking always on).
data-eeos-replay-sample-rate1.00..1 replay sampling.
data-eeos-debugoffConsole logging.
Privacy by default. Masking is mandatory and on — 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.