File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11# Open Telemetry Support <Experimental /> {#open-telemetry-support}
22
3+ ::: tip Example Project
4+
5+ [ GitHub] ( https://github.com/vitest-dev/vitest/tree/main/examples/opentelemetry )
6+
7+ :::
8+
39[ OpenTelemetry] ( https://opentelemetry.io/ ) traces can be a useful tool to debug the performance and behavior of your application inside tests.
410
511If enabled, Vitest integration generates spans that are scoped to your test's worker.
Original file line number Diff line number Diff line change 1+ # Vitest Opentelemtry Example
2+
3+ - ** Documentation** : https://vitest.dev/guide/open-telemetry.html
4+
5+ ## Usage
6+
7+ ``` sh
8+ # Start Jaeger service to receive otlp traces over http
9+ # and serve Web UI at http://localhost:16686
10+ docker compose up -d
11+
12+ # Run tests (exports with OTLP HTTP by deafult)
13+ pnpm test --experimental.openTelemetry.enabled
14+
15+ # Use console exporter for quick debugging
16+ OTEL_TRACES_EXPORTER=console pnpm test --experimental.openTelemetry.enabled
17+
18+ # Run browser mode
19+ pnpm test --experimental.openTelemetry.enabled --browser.enabled
20+ ```
Original file line number Diff line number Diff line change 1+ services :
2+ # for testing open-telemetry integration locally
3+ # https://www.jaegertracing.io/docs/2.12/getting-started/
4+ jaeger :
5+ image : cr.jaegertracing.io/jaegertracing/jaeger:2.12.0
6+ # Assign ports for Jaeger UI and OTLP receiver
7+ ports :
8+ # UI http://localhost:16686
9+ - 16686:16686
10+ # OTLP over HTTP (default for NodeSDK)
11+ - 4318:4318
12+ # Optional: uncomment if needed
13+ # - 4317:4317 # OTLP over gRPC
14+ # - 5778:5778 # Jaeger sampling strategies
15+ # - 9411:9411 # Zipkin compatibility
16+
17+ # Use volume to persist data across container restarts.
18+ # This can be commented out if persistence is not needed.
19+ # https://www.jaegertracing.io/docs/2.12/storage/badger/
20+ user : ' 0:0'
21+ command : --config /etc/jaeger/config.yml
22+ volumes :
23+ - ./jaeger-config.yml:/etc/jaeger/config.yml:ro
24+ - jaeger-data:/tmp/badger
25+
26+ volumes :
27+ jaeger-data :
Original file line number Diff line number Diff line change 1+ # https://www.jaegertracing.io/docs/2.12/deployment/configuration/
2+ extensions :
3+ jaeger_storage :
4+ backends :
5+ main_storage :
6+ badger :
7+ directories :
8+ keys : /tmp/badger/keys
9+ values : /tmp/badger/data
10+ ephemeral : false
11+ consistency : true
12+ maintenance_interval : 5m
13+ jaeger_query :
14+ storage :
15+ traces : main_storage
16+
17+ receivers :
18+ otlp :
19+ protocols :
20+ grpc :
21+ endpoint : 0.0.0.0:4317
22+ http :
23+ endpoint : 0.0.0.0:4318
24+
25+ processors :
26+ batch :
27+
28+ exporters :
29+ jaeger_storage_exporter :
30+ trace_storage : main_storage
31+
32+ service :
33+ extensions : [jaeger_storage, jaeger_query]
34+ pipelines :
35+ traces :
36+ receivers : [otlp]
37+ processors : [batch]
38+ exporters : [jaeger_storage_exporter]
Original file line number Diff line number Diff line change 1+ // @ts -check
2+ import { NodeSDK } from '@opentelemetry/sdk-node'
3+
4+ const sdk = new NodeSDK ( {
5+ serviceName : 'vitest' ,
6+
7+ // NodeSDK uses "@opentelemetry/exporter-trace-otlp-proto" by default.
8+ // you can override it via `traceExporter` options.
9+ // traceExporter: ...,
10+
11+ // you can configure additional instrumentations such as `@opentelemetry/auto-instrumentations-node`
12+ // via `instrumentations` options.
13+ // instrumentations: ...
14+ } )
15+ sdk . start ( )
16+ export default sdk
Original file line number Diff line number Diff line change 1+ {
2+ "name" : " @vitest/example-opentelemetry" ,
3+ "type" : " module" ,
4+ "private" : true ,
5+ "license" : " MIT" ,
6+ "scripts" : {
7+ "compose" : " docker compose" ,
8+ "test" : " vitest"
9+ },
10+ "devDependencies" : {
11+ "@opentelemetry/sdk-node" : " ^0.208.0" ,
12+ "@vitest/browser-playwright" : " latest" ,
13+ "vite" : " latest" ,
14+ "vitest" : " latest"
15+ }
16+ }
Original file line number Diff line number Diff line change 1+ import { expect , test } from 'vitest'
2+ import { sleep } from './basic'
3+
4+ test ( 'one plus one' , async ( ) => {
5+ await sleep ( 100 )
6+ expect ( 1 + 1 ) . toBe ( 2 )
7+ } )
8+
9+ test ( 'one plus two' , async ( ) => {
10+ expect ( 1 + 2 ) . toBe ( 3 )
11+ } )
Original file line number Diff line number Diff line change 1+ export function sleep ( ms : number ) : Promise < void > {
2+ return new Promise ( resolve => setTimeout ( resolve , ms ) )
3+ }
Original file line number Diff line number Diff line change 1+ import { playwright } from '@vitest/browser-playwright'
2+ import { defineConfig } from 'vitest/config'
3+
4+ export default defineConfig ( {
5+ test : {
6+ experimental : {
7+ openTelemetry : {
8+ // enable via CLI flag --experimental.openTelemetry.enabled=true
9+ enabled : false ,
10+ sdkPath : './otel.js' ,
11+ } ,
12+ } ,
13+ browser : {
14+ // enable via CLI flag --browser.enabled=true
15+ enabled : false ,
16+ provider : playwright ( ) ,
17+ instances : [ { browser : 'chromium' } ] ,
18+ } ,
19+ } ,
20+ } )
You can’t perform that action at this time.
0 commit comments