A developer posted in r/Observability with a setup that’s increasingly common: React SPA on NGINX, OpenTelemetry JS SDK already wired up, telemetry flowing through a custom reverse proxy to Splunk. Their client wanted to add Grafana Cloud as a second destination. They considered Grafana Faro because it handles CORS natively and is purpose-built for browser RUM.
But the client had been burned by a proprietary SDK before and had a hard requirement: Pure OpenTelemetry only, nothing vendor-specific.
I answered the post because this is a problem I deal with directly in my work on the OTel Browser project. The client made the right call. The entire point of OpenTelemetry is that your instrumentation code shouldn’t be tightly coupled to any one backend. Proprietary SDKs on day one means enormous switching costs later and a vendor that has leverage over you.
But there’s a problem. Almost no observability backend supports CORS natively on their OTLP ingestion endpoint. They’re all built for server-side collectors. Browsers aren’t part of the design.
It’s a problem that deserves a longer treatment than a Reddit comment. Here’s what else I want to talk about.