Skip to main content

The /observe embed - the Observe explore surface

/observe/[[...feature]] iframes dfe-hyperdx in chromeless mode (?embed=1) so the dfe-ui shell owns navigation while dfe-hyperdx provides the Kibana-style explore over ALL DFE data in ClickHouse. Theme changes are pushed into the iframe via a DFE_SET_THEME postMessage.

How it is configured​

One runtime mechanism, two deployment shapes. The (auth) layout reads both values per request and hands them to HyperdxContext; useHyperdxUrl() is the single source the iframe URL and the sidebar gating read.

VariableShape
HYPERDX_URLdfe-hyperdx on its own hostname (k8s gateway: https://hyperdx.{domain}). Wins when set.
HYPERDX_PORTSame host, different port (docker compose). Host comes from window.location, so it is correct for localhost and LAN alike.

Neither is NEXT_PUBLIC_, and that is deliberate: a build-inlined read would bake the build machine's value into the browser bundle. With neither set, /observe renders "Search is not configured for this deployment."

The console's Content-Security-Policy frames nothing but dfe-hyperdx: frame-src is HYPERDX_URL's origin, or the host the browser used on HYPERDX_PORT. dfe-hyperdx reached any other way is blocked in the browser.

Rule-create round trip​

dfe-hyperdx creates the rule through its dfe/create-rule route, which forwards to the engine, and opens /rules/{id} in a new tab. dfe-ui holds no listener for it. Detail: hyperdx-rule-create.md.