Skip to main content

Your first trace

This walkthrough takes you from "it's installed" to "I can read a distributed trace." It uses the bundled HotROD demo app (a multi-service ride-sharing example) so you have real traffic to look at.

1. Bring up the sandbox​

The fastest way to get traffic is the local Docker sandbox, which includes the demo app:

git clone https://github.com/avuruvision/avuru-obs && cd avuru-obs
make dev

This starts ClickHouse, the gateway, the hub, the UI, and the HotROD demo. The UI is on http://localhost:8080.

:::note Already on Kubernetes? If you installed with Helm instead, deploy any workload that makes service-to-service calls — the eBPF sensor will map it automatically. The rest of this guide is identical. :::

2. Generate some load​

Open the HotROD app and click a few of the "request ride" buttons, or drive load from the terminal:

for i in $(seq 1 20); do curl -s localhost:8080/dispatch?customer=123 >/dev/null; done

3. Watch the map​

In the avuru UI, open Service Map. You should see the demo services wired together — frontend → driver → route, with edges weighted by request rate. This map came entirely from eBPF: no SDK was added to the demo.

4. Open a trace​

  1. Go to Traces.
  2. Sort by duration to find a slow request.
  3. Click it to open the waterfall — each span is one hop, nested by parent.

Read it top-down: total latency at the root, then where the time actually went.

5. Correlate​

From the open trace, pivot:

  • Logs for the same trace_id — what the service logged during the request.
  • Metrics — the RED metrics (Rate, Errors, Duration) for that endpoint.
  • Profiling — which functions burned CPU while the span was open.

That pivot — staying inside one request's context across all four signals — is the whole point of a single storage engine.

Troubleshooting​

SymptomLikely causeFix
Empty Service MapNo traffic yetGenerate load (step 2)
Map but no tracesKernel lacks BTFUse OTLP SDKs, or upgrade kernel (≥ 5.8)
Nothing at allPods not readykubectl -n avuruobs get pods

Next​

  • Setup — production install options.
  • Integrations — add rich spans for your stack.