This demo is copied from Jaeger project, and we make some changes on the original codes
This is a demo application that consists of several microservices and illustrates the use of the OpenTelemetry API & SDK. It can be run standalone, but requires Jaeger backend to view the traces. A tutorial / walkthrough is available:
- as a blog post Take Jaeger for a HotROD ride,
- as a video OpenShift Commons Briefing: Distributed Tracing with Jaeger & Prometheus on Kubernetes.
- Discover architecture of the whole system via data-driven dependency diagram
- View request timeline & errors, understand how the app works
- Find sources of latency, lack of concurrency
- Highly contextualized logging
- Use baggage propagation to
- Diagnose inter-request contention (queueing)
- Attribute time spent in a service
- Use opentelemetry-go-contrib open source libraries to instrument HTTP and gRPC requests with minimal code changes
docker-compose -p xo-hotrod -f ./docker-compose.yml up -d
kustomize build ./kubernetes | kubectl apply -f -
kubectl port-forward -n example-hotrod service/example-hotrod 8080:frontend
# In another terminal
kubectl port-forward -n example-hotrod service/jaeger 16686:frontend
# To cleanup
kustomize build ./kubernetes | kubectl delete -f -
Access Jaeger UI at http://localhost:16686 and HotROD app at http://localhost:8080
An all-in-one Jaeger backend is packaged as a Docker container with in-memory storage.
docker run \
--rm \
--name jaeger \
-p6831:6831/udp \
-p16686:16686 \
-p14268:14268 \
jaegertracing/all-in-one:latest
Jaeger UI can be accessed at http://localhost:16686.
git clone [email protected]:jaegertracing/jaeger.git jaeger
cd jaeger
go run ./examples/hotrod/main.go all
docker run \
--rm \
--link jaeger \
--env OTEL_EXPORTER_JAEGER_ENDPOINT=http://jaeger:14268/api/traces \
-p8080-8083:8080-8083 \
jaegertracing/example-hotrod:latest \
all
Then open http://127.0.0.1:8080
The app exposes metrics in either Go's expvar
format (by default) or in Prometheus format (enabled via -m prometheus
flag).
expvar
:curl http://127.0.0.1:8083/debug/vars
- Prometheus:
curl http://127.0.0.1:8083/metrics
The HotROD UI can generate links to the Jaeger UI to find traces corresponding
to each executed request. By default it uses the standard Jaeger UI address
http://localhost:16686, but if your Jaeger UI is running at a different address,
it can be customized via -j <address>
flag passed to HotROD, e.g.
go run ./examples/hotrod/main.go all -j http://jaeger-ui:16686