Skip to content

Commit 167d3a9

Browse files
authored
docs: add examples/opentelemetry (#9201)
1 parent 01a9a58 commit 167d3a9

10 files changed

Lines changed: 172 additions & 0 deletions

File tree

docs/guide/open-telemetry.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
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

511
If enabled, Vitest integration generates spans that are scoped to your test's worker.

examples/opentelemetry/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
```
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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:
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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]

examples/opentelemetry/otel.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
})
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function sleep(ms: number): Promise<void> {
2+
return new Promise(resolve => setTimeout(resolve, ms))
3+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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+
})

pnpm-lock.yaml

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)