Spring Cloud and Spring Boot. Part 2: using Zipkin Server for distributed tracing
From the last article (Habré translation, original in English) you learned how to use Eureka Server to discover and register services. In this article, we will introduce you to Distributed Tracing.
What is distributed tracing
Distributed tracing is used to find and fix errors in the operation of microservices. It helps track the progress of a request through a number of microservices. And besides that, it can be used for performance analysis.
With its help, it is easy to determine which microservice has crashed or where performance problems have arisen.
In this article, we will take a look at using Zipkin Server for distributed tracing. To do this, we need the following dependencies in pom.xml
…
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.7</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.7</version>
</dependency>
Launching Zipkin Server
Create a maven application and give it some name (like zipkin-server). To create a Spring project, you can use https://start.spring.io…
Your pom.xml
should look like this:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.zikin.server</groupId>
<artifactId>zipkin-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>zipkin-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.7</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Now open ZipkinServerApplication.java
and add annotation @EnableZipkinServer
as shown below.
package com.example.zikin.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin2.server.internal.EnableZipkinServer;
@SpringBootApplication
@EnableZipkinServer
public class ZipkinServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinServerApplication.class, args);
}
}
To file application.properties
located in src/main/resources
, add the following parameters.
spring.application.name=zipkin-server
server.port=9411
Run the project as Java application and go to http: // localhost: 9411 / zipkin…
There are no traces here yet, as the client applications have not been registered yet.
Registering a client application with Zipkin Server
Registering Eureka Server with Zipkin Server
In the previous article (Habré translation, original in English.) we have seen how to start Eureka Server. It can now be registered with Zipkin Server by adding one property to the file application.properties
…
spring.zipkin.base-url=http://localhost:9411/
Parameter spring.zipkin.base-url
defines the address where the Zipkin Server is located.
You also need to add another dependency to pom.xml
Eureka Server applications.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
After Eureka Server starts up, you will see traces in Zipkin Server, and eureka-server will appear in the Service Name field in Zipkin Server UI.
Registering a Spring Boot client application with Zipkin Server
To register any Spring Boot based client application, you need to add one property to the file application.properties
…
spring.zipkin.base-url=http://localhost:9411/
And one dependency in the pom.xml of your client application.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
After launching the client application, you should be able to see its trace in Zipkin.
View trace details in Zipkin Server
You can view the trace details by clicking on any of the entries shown in the image above.
Now you know how to use Zipkin Server for distributed tracing.
Translation of the article was prepared on the eve of the start of the course “Spring Framework Developer”… We invite everyone to register for a free demo lesson on the topic Introducing the Cloud, Creating a Cluster in Mongo DB Atlas…
During the lesson, participants, together with an expert, will talk about the types of clouds and set up a free Mongo DB cluster for their projects.