Updated February 21, 2023
Introduction to Spring Cloud Sleuth
Spring cloud sleuth provides auto-configuration of spring boot for distributed tracing. It will configure everything which we require to get started. Sleuth includes where the trace data is reporting, how traces we require if we are required to send remote field, and which libraries need to be traced. It is used to add the traces into slf4j mdc.
What is spring cloud sleuth?
- It is used to span ids and add traces into the slf4j mdc, so we can extract the logs from a given span or trace using a log aggregator.
- It is also used to push the sampling decision below for tracer implementation. There are multiple ways we can change the sampling decision at runtime.
- To implement the project, we need to add starter sleuth dependency in the pom.xml file.
Spring cloud sleuth is adding two types of IDs in our logging.
1) Span ID
2) Trace ID
- Span ID represents the unit of work like sending a request of HTTP. Trace ID in sleuth contains a number of span IDs, creating a tree structure.
When calling one microservice to other traces, the ID is the same; it will not change throughout the procedure.
Use of Spring Cloud Sleuth and Zipkin
- In spring, cloud sleuth traces connect it from service to service using header propagation. It will use the default format for traces as B3.
- We can also change the sampling decision by skipping the client span reporting. We can achieve this by setting the spring sleuth web client skip pattern (spring.sleuth.web.client.skip-pattern) with the path pattern as skipped.
- Zipkin is the distributed tracing system; it was used to gather the timing data needed to troubleshoot the latency problems. Zipkin feature includes the lookups and collection of the data.
- Zipkin is very useful at the time of debugging when we have implemented multiple microservices and our application is performing slowly at a certain period.
- Sleuth is nothing but the tool which was provided by spring cloud, used to generate service calls, the diagnostic context of mapping and headers, trace ID, and span ID.
- Spring cloud sleuth is used in tools like ELK and Zipkin. Sleuth is used in Zipkin for processing logs and storing the indexes.
- Sleuth is from the spring cloud family; after adding the same into the classpath, it will automatically be integrated between communication channels.
Spring Cloud Build project
The below example shows build projects.
1. Create a project template of spring cloud build by using spring initializer.
- In the below step, we have provided project group name as com. example, artifact name as springcloudsleuth, project name as springcloudsleuth, and selected java version as 8.
- In the below project, we have selected spring web and sleuth dependency to implement the spring cloud build project.
Group – com. example Artifact name – springcloudsleuth
Name – springcloudsleuth Spring boot – 2.6.0
Project – Maven Project Description – Project for springcloudsleuth
Java – 8 Dependencies – sleuth, spring web
Package name – com. example.springcloudsleuth
2. After generating the project extract files and open this project by using the spring tool suite.
After generating the project using the spring initializer in this step, we extract the jar file and open the project using the spring tool suite.
3. After opening the project using spring tool suite check the project and its files.
In this step, we are checking all the project template files. We also need to check maven dependencies and system libraries.
4. Add dependency packages.
In this step, we are adding the contract verifier dependency in the build project.
Code:
<dependency> -- Start of dependency tag.
<groupId>org.springframework.cloud</groupId> -- Start and end of groupId tag.
<artifactId>spring-cloud-starter-sleuth</artifactId> -- Start and end of artifactId tag.
</dependency> -- End of dependency tag.
5. Build the project.
Example of Spring cloud sleuth
We are using the sleuth application to configure the first microservice. The below step shows example of sprig cloud sleuth as follows.
1. Create controller for the first microservice –
Microservice 1
Code:
@SpringBootApplication
public class micro1 {
public static void main(String[] args) {
SpringApplication.run(micro1.class, args);
}
}
@RestController
class ZipkinController{
@Autowired
RestTemplate rTemp;
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@Bean
public springcloudsleuth alwaysSampler() {
return new springcloudsleuth();
}
@GetMapping(value="/sleuth-Zipkin")
public String zipkinService1()
{
LOG.info("spring cloud sleuth");
String response = (String) rTemp.exchange ("http://localhost:8080/zipkin",
HttpMethod.GET, null, new ParameterizedTypeReference<String>() {}).getBody ();
return "springcloudsleuth...";
}
}
2. Configure application.properties file –
Code:
server.port = 8080
spring.application.name = springcloudsleuth-server1
3. Create another three microservices and configure the application.properties file, use the port 8081, 8082, and 8083 –
Microservice 2
Microservice 3
Microservice 4
4. After creating and configuring all microservices start all microservices –
Start the first microservice:
Start the second microservice:
Start the third microservice:
Start the fourth microservice:
5. Open zipkin dashboard and check the services –
Web Request with Service Access
- The extremely customizable web requests view allows us to examine more popular web requests from all of our services and search for requests that originate from directed to specific URLs.
- The view of service access is easily customizable and serves as a good starting point for a more in-depth examination of our services.
- Using sleuth it is very easy to add the required dependency to implement a project.
- We can configure an alternate header format by specifying similar data formats.
Conclusion
Spring cloud sleuth is used to span ids and add traces into the slf4j mdc, so we can extract the logs from a given span or trace by using log aggregator. It will configure everything which we require to get started.
Recommended Articles
This is a guide to Spring Cloud Sleuth. Here we discuss the definition, what is spring cloud sleuth, examples, code, and applications. You may also have a look at the following articles to learn more –