This is a big release that comes with a major new feature: Distributed Tracing via OpenTelemetry (#297).
You can find the full documentation in ./tracing.
As a quick demo, you could run a demo locally with a provided Docker image:
- Run Jaeger
all-in-one
to provide an OpenTelemetry sink and UI:
docker run --rm -it --net host jaegertracing/all-in-one:1.54.0
-
Open Jaeger UI: http://localhost:16686/.
-
Build tracing demos from the root of the repo:
make tracing-demos
- Run
ebpf_exporter
with asock-trace
example from the root of the repo:
docker run --rm -it --privileged --net host -e OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 -v $(pwd)/tracing:/tracing ghcr.io/cloudflare/ebpf_exporter:v2.4.0 --config.dir=examples --config.names=sock-trace
- Run the demo:
./tracing/demos/sock/demo
-
Refresh the Jaeger UI and select
demo
as the service, click "Find Traces". -
Observe a trace that includes both userspace demo component produced spans and kernel spans produced with
ebpf_exporter
:
![image](https://private-user-images.githubusercontent.com/89186/308410497-37d9d4a9-6764-4b0c-8cfc-343f9546fde5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDkwOTMzNjksIm5iZiI6MTcwOTA5MzA2OSwicGF0aCI6Ii84OTE4Ni8zMDg0MTA0OTctMzdkOWQ0YTktNjc2NC00YjBjLThjZmMtMzQzZjk1NDZmZGU1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAyMjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMjI4VDA0MDQyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg1NWM5YmQwNDU0M2Y2Njg0NGJmNTk1OTA1ZDAzY2I4YTUwNjBmM2Y3MDg4MjQ0MGVlYjBmYTY4ODg2OGUxNzUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.w_g-6ZTqezlwrltkG07dmWG7Tw8QelLaW9urIkHow04)
![image](https://private-user-images.githubusercontent.com/89186/308410548-3f342237-a36c-4c2e-92b4-0d6cdb2a43b6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MDkwOTMzNjksIm5iZiI6MTcwOTA5MzA2OSwicGF0aCI6Ii84OTE4Ni8zMDg0MTA1NDgtM2YzNDIyMzctYTM2Yy00YzJlLTkyYjQtMGQ2Y2RiMmE0M2I2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDAyMjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwMjI4VDA0MDQyOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk3MzAxNDliNzA1ZmFjOGMyMTNiYjNmM2NiOGI5MDFlODU4NzcxYjQ5MGI4ZmIyMDA5NGExZDllNWYxODc4NzYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OWJrHeLMNnCT4lBP6KKvfIo4kDuAjtesBi_BGCk4has)
We have more examples bundled, please see the docs.
Tracing support required us to take a few dependencies that needed a newer Go version, so we bumped the build requirement from go1.18 to go1.20.
Other changes: