A collection of examples how to use brave instrumentation in various frameworks and libraries.
This is an example app where two Java services collaborate on a request.
Notably, these services send data to Zipkin, a distributed tracing system. Zipkin allows you to see how long the operation took, as well how much time was spent in each service.
Here's an example of what it looks like:
This example has two services: frontend and backend. Both are instrumented to send tracing data to a third service Zipkin. Brave performs this function.
To set up the demo, you need to start Frontend, Backend and Zipkin. You can do this using Java commands or Docker.
Once the services start, open http://localhost:8081/
Afterward, you can view traces that went through the backend via http://127.0.0.1:9411/zipkin?serviceName=backend
There are some interesting details that apply to all examples:
user_name
Brave will automatically propagate it to the backend!
curl -s localhost:8081 -H'user_name: JC'
%d{HH:mm:ss.SSS} [%thread] [%X{userName}] [%X{traceId}/%X{spanId}] %-5level %logger{36} - %msg%n
Here are the example projects you can try:
armeria BRAVE_EXAMPLE=armeria docker-compose up
armeria-kafka BRAVE_EXAMPLE=armeria-kafka docker-compose -f docker-compose.yml -f docker-compose-kafka.yml up
jersey2-cassandra3 BRAVE_EXAMPLE=jersey2-cassandra3 docker-compose up
netty4-grpc BRAVE_EXAMPLE=netty4-grpc docker-compose up
webflux5-sleuth BRAVE_EXAMPLE=webflux5-sleuth docker-compose up
BRAVE_EXAMPLE=webflux5-sleuth docker-compose -f docker-compose.yml -f docker-compose-eureka.yml up
webflux6-micrometer BRAVE_EXAMPLE=webflux6-micrometer docker-compose up
webmvc25-jetty BRAVE_EXAMPLE=webmvc25-jetty docker-compose up
webmvc3-jetty BRAVE_EXAMPLE=webmvc3-jetty docker-compose up
webmvc4-jetty BRAVE_EXAMPLE=webmvc4-jetty docker-compose up
webmvc4-boot BRAVE_EXAMPLE=webmvc4-boot docker-compose up
Docker Compose is the easiest way to start.
Just run docker-compose up
.
Armeria starts by default. To use a different version of the project, set the VERSION
variable.
Ex. VERSION=webmvc25-jetty docker-compose up
When not using Docker, you'll need to start services according to the frameworks used.
First, start Zipkin. This stores and queries traces reported by the example services.
Starting Zipkin with Java:
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
In a separate tab or window, start each of brave.example.Frontend
and brave.example.Backend
.
Ex.
$ cd armeria
$ mvn compile exec:java -Dexec.mainClass=brave.example.Backend
$ mvn compile exec:java -Dexec.mainClass=brave.example.Frontend
In a separate tab or window, start a Jetty container for "backend" and "frontend".
Ex.
$ cd webmvc4-jetty
$ mvn jetty:run -Pfrontend
$ mvn jetty:run -Pbackend