Skip to content

Latest commit

 

History

History
 
 

hotrod

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Hot R.O.D. - Rides on Demand

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:

Features

  • 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

Running

Run everything via docker-compose

docker-compose -p xo-hotrod -f ./docker-compose.yml up -d

Run everything in Kubernetes

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 https://localhost:16686 and HotROD app at https://localhost:8080

Run Jaeger backend

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 https://localhost:16686.

Run HotROD from source

git clone [email protected]:jaegertracing/jaeger.git jaeger
cd jaeger
go run ./examples/hotrod/main.go all

Run HotROD from docker

docker run \
  --rm \
  --link jaeger \
  --env OTEL_EXPORTER_JAEGER_ENDPOINT=https://jaeger:14268/api/traces \
  -p8080-8083:8080-8083 \
  jaegertracing/example-hotrod:latest \
  all

Then open https://127.0.0.1:8080

Metrics

The app exposes metrics in either Go's expvar format (by default) or in Prometheus format (enabled via -m prometheus flag).

  • expvar: curl https://127.0.0.1:8083/debug/vars
  • Prometheus: curl https://127.0.0.1:8083/metrics

Linking to traces

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 https://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 https://jaeger-ui:16686