Understanding how your SvelteKit application behaves in production — from request flows to performance bottlenecks — is crucial for building reliable user experiences. SvelteKit now has first-class support for observability: built-in OpenTelemetry tracing, and a dedicated instrumentation setup file that ensures your monitoring tools work seamlessly.
To opt in, upgrade SvelteKit and your adapter and add the following to your svelte.config.js
:
export default {
kit: {
experimental: {
tracing: {
server: boolean;
};
instrumentation: {
server: boolean;
};
};
}
kit: {
experimental: {
tracing: {
server: boolean;
};
instrumentation: {
server: boolean;
};
}
experimental: {
tracing: {
server: boolean;
}
tracing: {
server: boolean
server: true
},
instrumentation: {
server: boolean;
}
instrumentation: {
server: boolean
server: true
}
}
}
};
First-party OpenTelemetry traces
SvelteKit can now emit OpenTelemetry traces for the following:
handle
hook (handle
functions running in asequence
will show up as children of each other and the root handle hook)load
functions (includes universalload
functions when they run on the server)- Form actions
- Remote functions
The emitted spans include attributes describing the current request, such as http.route
, and surrounding context, such as the +page
or +layout
file associated with a load
function. If there are additional attributes you think might be useful, please file an issue on the SvelteKit GitHub issue tracker.
A convenient home for all of your instrumentation
Emitting traces alone is not enough: You also need to collect them and send them somewhere. Under normal circumstances, this can be a bit challenging. Because of the nature of observability instrumentation, it needs to be loaded prior to loading any of the code from your app. To aid in this, SvelteKit now supports a src/instrumentation.server.ts
file which, assuming your adapter supports it, is guaranteed to be loaded prior to your application code.
In Node, your instrumentation might look something like this:
import { import NodeSDK
NodeSDK } from '@opentelemetry/sdk-node';
import { import getNodeAutoInstrumentations
getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { import OTLPTraceExporter
OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
import { import createAddHookMessageChannel
createAddHookMessageChannel } from 'import-in-the-middle';
import { function register<Data = any>(specifier: string | URL, parentURL?: string | URL, options?: Module.RegisterOptions<Data>): void (+1 overload)
Register a module that exports hooks that customize Node.js module
resolution and loading behavior. See
Customization hooks.
@sincev20.6.0, v18.19.0@paramspecifier Customization hooks to be registered; this should be
the same string that would be passed to import()
, except that if it is
relative, it is resolved relative to parentURL
.@paramparentURL f you want to resolve specifier
relative to a base
URL, such as import.meta.url
, you can pass that URL here.register } from 'module';
const { const registerOptions: any
registerOptions } = import createAddHookMessageChannel
createAddHookMessageChannel();
register<any>(specifier: string | URL, parentURL?: string | URL, options?: Module.RegisterOptions<any>
Login to add comment
Other posts in this group

With Async Svelte and its companion Remote Functions officially ou

Whether you’re trying out Vite 7, vitest browser mode or remote functions, there’s lots of experimental features to try t

In addition to advancing the work on Async Svelte, the maintainers have been hard at work introducing long requested features like Attachments.
This month, we’ll share a bit about the

This month’s Svelte Summit in Barcelona was a glorious celebration of the community. We had lively conversations, delightful dinners, and funny, im

Only a week until Svelte Summit Spring 2025! If you can’t make it in-person to Barcelona, you can purchase a virtual ticket

With a couple minor releases of SvelteKit in the last month and a few more from Svelte itself, there’s a lot to be excited about this month. From new helper functions to new configuration opt

SvelteHack 2024 has ended and the winners were announced on February 9th. Congrats to all the