Getting Your Hands Dirty with Spring Cloud Sleuth and Zipkin — Distributed Tracing in Action

Alexander Obregon
3 min readAug 19, 2023

--

Image Source

Introduction

In the age of microservices, understanding the journey of a request through various services is crucial for debugging and performance monitoring. This is where distributed tracing steps in, with tools like Spring Cloud Sleuth and Zipkin. This article will guide you through these amazing tools and illustrate how they facilitate distributed tracing in microservice-based architectures.

What is Distributed Tracing?

Distributed tracing is a method used to monitor applications, especially those built using a microservices architecture. Each microservice contributes a small amount to the overall functionality, and it’s beneficial to trace how requests pass through these services.

Introducing Spring Cloud Sleuth and Zipkin

Spring Cloud Sleuth is a distributed tracing solution for Spring Cloud. It helps understand the latency issues in the microservice architecture by adding tracing information to the logs. While Sleuth helps to generate trace information, visualizing and storing it is a job for a tool like Zipkin.

Zipkin is a distributed tracing system that helps gather timing data needed to troubleshoot latency problems in microservice architectures. It manages both the collection and lookup of this data, visualizing traces in a neat UI.

How do they work together?

Spring Cloud Sleuth generates traces and spans. Traces represent a whole unit of work, while spans represent an individual unit of work done in a trace. Zipkin then visualizes this data.

Getting Started

First, ensure that you have a working Spring Boot application. You can create one using the Spring Initializer.

Setting up Spring Cloud Sleuth

Add the Spring Cloud Sleuth starter to your pom.xml:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

Once you start your application, Sleuth will add trace and span ids to your logs.

Integrating with Zipkin

To send these logs to Zipkin, add the Zipkin starter to your pom.xml:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

You also need to add Zipkin’s location to your application.properties:

spring.zipkin.baseUrl=http://localhost:9411/

Running Zipkin

You can run Zipkin as a standalone process, or with Docker. Download the standalone jar file from Zipkin's GitHub release page and run:

java -jar zipkin-server-*version*-exec.jar

For Docker:

docker run -d -p 9411:9411 openzipkin/zipkin

Once Zipkin is running, you can access its UI at localhost:9411.

Inspecting Traces

With everything set up, make a request to your application. Then, check the Zipkin UI, where you should see the traces. Click on a trace to see more details about the spans within it.

Conclusion

Understanding the flow of requests through your microservices architecture can be a challenging task, but tools like Spring Cloud Sleuth and Zipkin make it easier. Now, you have a simple setup that allows for distributed tracing and visualization, giving you invaluable insights into your applications’ performance.

  1. Spring Cloud Sleuth Documentation
  2. Zipkin Project Homepage
  3. Zipkin GitHub Repository
  4. Baeldung Tutorial on Distributed Tracing with Spring Cloud Sleuth and Zipkin
Spring Boot icon by Icons8

--

--

Alexander Obregon

Software Engineer, fervent coder & writer. Devoted to learning & assisting others. Connect on LinkedIn: https://www.linkedin.com/in/alexander-obregon-97849b229/