https://github.com/grafana/xk6-distributed-tracing
  
  
    A k6 extension for distributed tracing. 
    https://github.com/grafana/xk6-distributed-tracing
  
distributed-tracing jaeger opentelemetry xk6
        Last synced: 29 days ago 
        JSON representation
    
A k6 extension for distributed tracing.
- Host: GitHub
- URL: https://github.com/grafana/xk6-distributed-tracing
- Owner: grafana
- License: apache-2.0
- Archived: true
- Created: 2021-03-16T12:28:11.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-01-09T12:57:00.000Z (almost 2 years ago)
- Last Synced: 2024-11-14T22:36:05.092Z (12 months ago)
- Topics: distributed-tracing, jaeger, opentelemetry, xk6
- Language: Go
- Homepage:
- Size: 29.8 MB
- Stars: 62
- Watchers: 145
- Forks: 9
- Open Issues: 0
- 
            Metadata Files:
            - Readme: README.md
- License: LICENSE
 
Awesome Lists containing this project
README
          > ### ⚠️ Archived ⚠️
>
> This extension has been archived and is no longer maintained by the Grafana team.
> 
> At this time, the tracing feature is now available in the as part of the
> [k6/experimental/tracing](https://grafana.com/docs/k6/latest/javascript-api/k6-experimental/tracing/)
> module in [k6 OSS](https://grafana.com/docs/k6/latest/).
> 
> Furthermore, [Distributed Tracing in Grafana Cloud k6](https://grafana.com/docs/cloud/k6/distributed-tracing/)
> is now generally available in Grafana Cloud.
>
> USE AT YOUR OWN RISK!
# xk6-distributed-tracing
This extension adds distributed tracing support to [k6](https://github.com/grafana/k6)! 
That means that if you're testing an instrumented system, you can use this extension to start the traces on k6. 
Currently, it supports HTTP requests and the following propagation formats: `w3c`, `b3`, and `jaeger`.
It is implemented using the [xk6](https://github.com/grafana/xk6) extension system.
## Build
To build a `k6` binary with this extension, first ensure you have the prerequisites:
- [Go toolchain](https://go101.org/article/go-toolchain.html)
- Git
Then:
1. Download `xk6`:
```bash
$ go install go.k6.io/xk6/cmd/xk6@latest
```
2. Build the binary:
```bash
$ xk6 build --with github.com/grafana/xk6-distributed-tracing@latest
```
## Example
```javascript
import tracing, { Http } from 'k6/x/tracing';
import { sleep } from 'k6';
export let options = {
  vus: 1,
  iterations: 10,
};
export function setup() {
  console.log(`Running xk6-distributed-tracing v${tracing.version}`, tracing);
}
export default function() {
  const http = new Http({
    propagator: "w3c",
  });
  const r = http.get('https://test-api.k6.io');
  console.log(`trace_id=${r.trace_id}`);
  sleep(1);
}
```
Result output:
```bash
$ ./k6 run script.js
          /\      |‾‾| /‾‾/   /‾‾/
     /\  /  \     |  |/  /   /  /
    /  \/    \    |     (   /   ‾‾\
   /          \   |  |\  \ |  (‾)  |
  / __________ \  |__| \__\ \_____/ .io
  execution: local
     script: script.js
     output: -
  scenarios: (100.00%) 1 scenario, 1 max VUs, 40s max duration (incl. graceful stop):
           * default: 1 looping VUs for 10s (gracefulStop: 30s)
INFO[0000] Running xk6-distributed-tracing v0.2.0  source=console
INFO[0000] trace_id=743fff0b96778539acb7139e72ea1e33
INFO[0001] trace_id=365f4637a52526db1de2d30a5568ca3a
INFO[0002] trace_id=c49e1df945049c5c3c8b59acc84d7d3b
INFO[0003] trace_id=53e1937d56aa172b46d2310e3380dfe9
INFO[0004] trace_id=d61e8757d35c9ca1780b88977ac56d72
INFO[0005] trace_id=358e794ed636d268a918dcd2f3f9db0a
INFO[0006] trace_id=992a959e09ee84f3905a215bec8b53a0
INFO[0007] trace_id=aee11c64de11744ab5b66d5dd8ed361b
INFO[0008] trace_id=c4dc45d857e99ede2bb902666457239d
INFO[0009] trace_id=7623d10293d9f03c15deb8055935664e
running (10.1s), 0/1 VUs, 10 complete and 0 interrupted iterations
default ✓ [======================================] 1 VUs  10s
     █ setup
     data_received..............: 1.6 kB 156 B/s
     data_sent..................: 1.7 kB 165 B/s
     http_req_blocked...........: avg=223.43µs min=146.53µs med=217.39µs max=314.54µs p(90)=276.68µs p(95)=295.61µs
     http_req_connecting........: avg=137.18µs min=87.22µs  med=130.17µs max=196.38µs p(90)=184.38µs p(95)=190.38µs
     http_req_duration..........: avg=6.58ms   min=5.07ms   med=6.45ms   max=7.91ms   p(90)=7.83ms   p(95)=7.87ms
     http_req_receiving.........: avg=187.27µs min=94.29µs  med=171.7µs  max=295.67µs p(90)=293.28µs p(95)=294.48µs
     http_req_sending...........: avg=128.07µs min=94.64µs  med=121.77µs max=175.65µs p(90)=160.41µs p(95)=168.03µs
     http_req_tls_handshaking...: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s
     http_req_waiting...........: avg=6.27ms   min=4.83ms   med=6.13ms   max=7.64ms   p(90)=7.56ms   p(95)=7.6ms
     http_reqs..................: 10     0.991797/s
     iteration_duration.........: avg=916.48ms min=65.67µs  med=1s       max=1s       p(90)=1s       p(95)=1s
     iterations.................: 10     0.991797/s
     vus........................: 1      min=1 max=1
     vus_max....................: 1      min=1 max=1
```