docs: add examples/opentelemetry (#9201)

This commit is contained in:
Hiroshi Ogawa 2025-12-08 19:28:15 +09:00 committed by GitHub
parent 01a9a58d90
commit 167d3a98ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 172 additions and 0 deletions

View File

@ -1,5 +1,11 @@
# Open Telemetry Support <Experimental /> {#open-telemetry-support}
::: tip Example Project
[GitHub](https://github.com/vitest-dev/vitest/tree/main/examples/opentelemetry)
:::
[OpenTelemetry](https://opentelemetry.io/) traces can be a useful tool to debug the performance and behavior of your application inside tests.
If enabled, Vitest integration generates spans that are scoped to your test's worker.

View File

@ -0,0 +1,20 @@
# Vitest Opentelemtry Example
- **Documentation**: https://vitest.dev/guide/open-telemetry.html
## Usage
```sh
# Start Jaeger service to receive otlp traces over http
# and serve Web UI at http://localhost:16686
docker compose up -d
# Run tests (exports with OTLP HTTP by deafult)
pnpm test --experimental.openTelemetry.enabled
# Use console exporter for quick debugging
OTEL_TRACES_EXPORTER=console pnpm test --experimental.openTelemetry.enabled
# Run browser mode
pnpm test --experimental.openTelemetry.enabled --browser.enabled
```

View File

@ -0,0 +1,27 @@
services:
# for testing open-telemetry integration locally
# https://www.jaegertracing.io/docs/2.12/getting-started/
jaeger:
image: cr.jaegertracing.io/jaegertracing/jaeger:2.12.0
# Assign ports for Jaeger UI and OTLP receiver
ports:
# UI http://localhost:16686
- 16686:16686
# OTLP over HTTP (default for NodeSDK)
- 4318:4318
# Optional: uncomment if needed
# - 4317:4317 # OTLP over gRPC
# - 5778:5778 # Jaeger sampling strategies
# - 9411:9411 # Zipkin compatibility
# Use volume to persist data across container restarts.
# This can be commented out if persistence is not needed.
# https://www.jaegertracing.io/docs/2.12/storage/badger/
user: '0:0'
command: --config /etc/jaeger/config.yml
volumes:
- ./jaeger-config.yml:/etc/jaeger/config.yml:ro
- jaeger-data:/tmp/badger
volumes:
jaeger-data:

View File

@ -0,0 +1,38 @@
# https://www.jaegertracing.io/docs/2.12/deployment/configuration/
extensions:
jaeger_storage:
backends:
main_storage:
badger:
directories:
keys: /tmp/badger/keys
values: /tmp/badger/data
ephemeral: false
consistency: true
maintenance_interval: 5m
jaeger_query:
storage:
traces: main_storage
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
jaeger_storage_exporter:
trace_storage: main_storage
service:
extensions: [jaeger_storage, jaeger_query]
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [jaeger_storage_exporter]

View File

@ -0,0 +1,16 @@
// @ts-check
import { NodeSDK } from '@opentelemetry/sdk-node'
const sdk = new NodeSDK({
serviceName: 'vitest',
// NodeSDK uses "@opentelemetry/exporter-trace-otlp-proto" by default.
// you can override it via `traceExporter` options.
// traceExporter: ...,
// you can configure additional instrumentations such as `@opentelemetry/auto-instrumentations-node`
// via `instrumentations` options.
// instrumentations: ...
})
sdk.start()
export default sdk

View File

@ -0,0 +1,16 @@
{
"name": "@vitest/example-opentelemetry",
"type": "module",
"private": true,
"license": "MIT",
"scripts": {
"compose": "docker compose",
"test": "vitest"
},
"devDependencies": {
"@opentelemetry/sdk-node": "^0.208.0",
"@vitest/browser-playwright": "latest",
"vite": "latest",
"vitest": "latest"
}
}

View File

@ -0,0 +1,11 @@
import { expect, test } from 'vitest'
import { sleep } from './basic'
test('one plus one', async () => {
await sleep(100)
expect(1 + 1).toBe(2)
})
test('one plus two', async () => {
expect(1 + 2).toBe(3)
})

View File

@ -0,0 +1,3 @@
export function sleep(ms: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, ms))
}

View File

@ -0,0 +1,20 @@
import { playwright } from '@vitest/browser-playwright'
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
experimental: {
openTelemetry: {
// enable via CLI flag --experimental.openTelemetry.enabled=true
enabled: false,
sdkPath: './otel.js',
},
},
browser: {
// enable via CLI flag --browser.enabled=true
enabled: false,
provider: playwright(),
instances: [{ browser: 'chromium' }],
},
},
})

15
pnpm-lock.yaml generated
View File

@ -370,6 +370,21 @@ importers:
specifier: workspace:*
version: link:../../packages/vitest
examples/opentelemetry:
devDependencies:
'@opentelemetry/sdk-node':
specifier: ^0.208.0
version: 0.208.0(@opentelemetry/api@1.9.0)
'@vitest/browser-playwright':
specifier: workspace:*
version: link:../../packages/browser-playwright
vite:
specifier: ^7.1.5
version: 7.1.5(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.1)(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)
vitest:
specifier: workspace:*
version: link:../../packages/vitest
examples/profiling:
devDependencies:
vite: