Post

Please please please have the verbose off by default. So many tools are throwing all this on by default and it makes for a bad day 1 experience when you're part of a much wider system. Using this for local development, or if you're the only part of the ecosystem, is amazing though.

This PR is using tracing channels, the example shows every possible span when an APM subscribes to all channels. So by default, even if enabled, Nuxt won't emit anything unless an APM subscribes to every single channel, so I think the noise-control lever should exist there. Does that make sense?

Ah, I understand your concern now. Luckily, this isn't OTel 😁 it's a telemetry agnostic API. It doesn't produce telemetry on its own, the APM has to do it.

"Someone" will need to build that otel receiver, which we're increasingly relying on authors of frameworks to build those out as they're the ones that know where attributes come from etc. The hope is that if the author is the one doing it, then the telemetry available is standards compliant.

This PR builds on the tracing channels in h3, srvx, and unstorage (which Nitro sits on). Those expose everything OTel's HTTP and storage conventions need to derive compliant spans. What this PR adds is channels for boundaries OTel has no convention for to be "compliant" with.

So if someone builds an OTel consumer for these channels, they've only have two options: skip the boundaries they have no convention for, or define their own namespaced spans for them. This is what existing frameworks already do, like Next.js.

I will happily donate my time to jump on a call about this stuff, I can even bring one for the JS otel maintainers with me. Theres a lot of words there that don't make sense to me. I only know the pains of JS otel right now and would love you not to get that hate for something awesome.