···11# Open Telemetry Support <Experimental /> {#open-telemetry-support}
2233+::: tip Example Project
44+55+[GitHub](https://github.com/vitest-dev/vitest/tree/main/examples/opentelemetry)
66+77+:::
88+39[OpenTelemetry](https://opentelemetry.io/) traces can be a useful tool to debug the performance and behavior of your application inside tests.
410511If enabled, Vitest integration generates spans that are scoped to your test's worker.
+20
examples/opentelemetry/README.md
···11+# Vitest Opentelemtry Example
22+33+- **Documentation**: https://vitest.dev/guide/open-telemetry.html
44+55+## Usage
66+77+```sh
88+# Start Jaeger service to receive otlp traces over http
99+# and serve Web UI at http://localhost:16686
1010+docker compose up -d
1111+1212+# Run tests (exports with OTLP HTTP by deafult)
1313+pnpm test --experimental.openTelemetry.enabled
1414+1515+# Use console exporter for quick debugging
1616+OTEL_TRACES_EXPORTER=console pnpm test --experimental.openTelemetry.enabled
1717+1818+# Run browser mode
1919+pnpm test --experimental.openTelemetry.enabled --browser.enabled
2020+```
+27
examples/opentelemetry/docker-compose.yaml
···11+services:
22+ # for testing open-telemetry integration locally
33+ # https://www.jaegertracing.io/docs/2.12/getting-started/
44+ jaeger:
55+ image: cr.jaegertracing.io/jaegertracing/jaeger:2.12.0
66+ # Assign ports for Jaeger UI and OTLP receiver
77+ ports:
88+ # UI http://localhost:16686
99+ - 16686:16686
1010+ # OTLP over HTTP (default for NodeSDK)
1111+ - 4318:4318
1212+ # Optional: uncomment if needed
1313+ # - 4317:4317 # OTLP over gRPC
1414+ # - 5778:5778 # Jaeger sampling strategies
1515+ # - 9411:9411 # Zipkin compatibility
1616+1717+ # Use volume to persist data across container restarts.
1818+ # This can be commented out if persistence is not needed.
1919+ # https://www.jaegertracing.io/docs/2.12/storage/badger/
2020+ user: '0:0'
2121+ command: --config /etc/jaeger/config.yml
2222+ volumes:
2323+ - ./jaeger-config.yml:/etc/jaeger/config.yml:ro
2424+ - jaeger-data:/tmp/badger
2525+2626+volumes:
2727+ jaeger-data:
···11+// @ts-check
22+import { NodeSDK } from '@opentelemetry/sdk-node'
33+44+const sdk = new NodeSDK({
55+ serviceName: 'vitest',
66+77+ // NodeSDK uses "@opentelemetry/exporter-trace-otlp-proto" by default.
88+ // you can override it via `traceExporter` options.
99+ // traceExporter: ...,
1010+1111+ // you can configure additional instrumentations such as `@opentelemetry/auto-instrumentations-node`
1212+ // via `instrumentations` options.
1313+ // instrumentations: ...
1414+})
1515+sdk.start()
1616+export default sdk