Spring Boot - Suivi des journaux de micro-service

La plupart des développeurs ont du mal à suivre les journaux en cas de problème. Cela peut être résolu par Spring Cloud Sleuth et le serveur ZipKin pour l'application Spring Boot.

Détective des nuages ​​de printemps

Les journaux de Spring Cloud Sleuth sont imprimés dans le format suivant -

[application-name,traceid,spanid,zipkin-export]

Où,

  • Application-name = Nom de l'application

  • Traceid = chaque traceid de demande et de réponse est le même lors de l'appel du même service ou d'un service vers un autre service.

  • Spanid = Span Id est imprimé avec Trace Id. Span Id est différent à chaque demande et réponse appelant un service à un autre service.

  • Zipkin-export = Par défaut, il est faux. Si c'est vrai, les journaux seront exportés vers le serveur Zipkin.

Maintenant, ajoutez la dépendance Spring Cloud Starter Sleuth dans votre fichier de configuration de build comme suit -

Les utilisateurs Maven peuvent ajouter la dépendance suivante dans votre fichier pom.xml -

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

Les utilisateurs Gradle peuvent ajouter la dépendance suivante dans votre fichier build.gradle -

compile('org.springframework.cloud:spring-cloud-starter-sleuth')

Maintenant, ajoutez les journaux dans le fichier de classe Rest Controller de votre application Spring Boot comme indiqué ici -

package com.tutorialspoint.sleuthapp;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class SleuthappApplication {
   private static final Logger LOG = Logger.getLogger(SleuthappApplication.class.getName());
   public static void main(String[] args) {
      SpringApplication.run(SleuthappApplication.class, args);
   }
   @RequestMapping("/")
   public String index() {
      LOG.log(Level.INFO, "Index API is calling");
      return "Welcome Sleuth!";
   }
}

Maintenant, ajoutez le nom de l'application dans le fichier application.properties comme indiqué -

spring.application.name = tracinglogs

Le code complet du fichier de configuration de construction est donné ci-dessous -

Maven – pom.xml

<?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.tutorialspoint</groupId>
   <artifactId>sleuthapp</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>sleuthapp</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.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>
      <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-sleuth</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
   
</project>

Gradle – build.gradle

buildscript {
   ext {
      springBootVersion = '1.5.9.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
ext {
   springCloudVersion = 'Edgware.RELEASE'
}
dependencies {
   compile('org.springframework.cloud:spring-cloud-starter-sleuth')
   compile('org.springframework.boot:spring-boot-starter-web')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
   imports {
      mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
   }
}

Vous pouvez créer un fichier JAR exécutable et exécuter l'application Spring Boot à l'aide des commandes Maven ou Gradle suivantes.

Pour Maven, vous pouvez utiliser la commande suivante -

mvn clean install

Après «BUILD SUCCESS», vous pouvez trouver le fichier JAR sous le répertoire cible.

Pour Gradle, vous pouvez utiliser la commande suivante -

gradle clean build

Après «BUILD SUCCESSFUL», vous pouvez trouver le fichier JAR dans le répertoire build / libs.

Maintenant, exécutez le fichier JAR en utilisant la commande indiquée ici -

java –jar <JARFILE>

Maintenant, l'application a démarré sur le port Tomcat 8080.

Maintenant, appuyez sur l'URL dans votre navigateur Web et voyez la sortie dans le journal de la console.

http://localhost:8080/

Vous pouvez voir les journaux suivants dans la fenêtre de la console. Observez que le journal est imprimé dans le format suivant [nom-application, traceid, spanid, zipkin-export]

Serveur Zipkin

Zipkin est une application qui surveille et gère les journaux Spring Cloud Sleuth de votre application Spring Boot. Pour créer un serveur Zipkin, nous devons ajouter les dépendances de l'interface utilisateur Zipkin et du serveur Zipkin dans notre fichier de configuration de construction.

Les utilisateurs Maven peuvent ajouter la dépendance suivante dans votre fichier pom.xml -

<dependency>
   <groupId>io.zipkin.java</groupId>
   <artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
   <groupId>io.zipkin.java</groupId>
   <artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>

Les utilisateurs de Gradle peuvent ajouter la dépendance ci-dessous dans votre fichier build.gradle -

compile('io.zipkin.java:zipkin-autoconfigure-ui')
compile('io.zipkin.java:zipkin-server')

Maintenant, configurez le server.port = 9411 dans le fichier de propriétés de l'application.

Pour les utilisateurs du fichier de propriétés, ajoutez la propriété ci-dessous dans le fichier application.properties.

server.port = 9411

Pour les utilisateurs YAML, ajoutez la propriété ci-dessous dans le fichier application.yml.

server:
   port: 9411

Ajoutez l'annotation @EnableZipkinServer dans votre fichier de classe d'application Spring Boot principal. L'annotation @EnableZipkinServer est utilisée pour permettre à votre application d'agir comme un serveur Zipkin.

package com.tutorialspoint.zipkinapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.EnableZipkinServer;

@SpringBootApplication
@EnableZipkinServer
public class ZipkinappApplication {
   public static void main(String[] args) {
      SpringApplication.run(ZipkinappApplication.class, args);
   }
}

Le code du fichier de configuration de construction complet est donné ci-dessous.

Maven – pom.xml

<?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.tutorialspoint</groupId>
   <artifactId>zipkinapp</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>zipkinapp</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.9.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>
      <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>io.zipkin.java</groupId>
         <artifactId>zipkin-server</artifactId>
      </dependency>
      <dependency>
         <groupId>io.zipkin.java</groupId>
         <artifactId>zipkin-autoconfigure-ui</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
   
</project>

Gradle – build.gradle

buildscript {
   ext {
      springBootVersion = '1.5.9.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
ext {
   springCloudVersion = 'Edgware.RELEASE'
}
dependencies {
   compile('io.zipkin.java:zipkin-autoconfigure-ui')
   compile('io.zipkin.java:zipkin-server')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}
dependencyManagement {
   imports {
      mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
   }
}

Vous pouvez créer un fichier JAR exécutable et exécuter l'application Spring Boot en utilisant les commandes Maven ou Gradle ci-dessous -

Pour Maven, utilisez la commande ci-dessous -

mvn clean install

Après «BUILD SUCCESS», vous pouvez trouver le fichier JAR sous le répertoire cible.

Pour Gradle, utilisez la commande ci-dessous -

gradle clean build

Après «BUILD SUCCESSFUL», vous pouvez trouver le fichier JAR dans le répertoire build / libs.

Exécutez le fichier JAR en utilisant la commande indiquée -

java –jar <JARFILE>

Maintenant, l'application a démarré sur le port Tomcat 9411 comme indiqué ci-dessous -

Maintenant, cliquez sur l'URL ci-dessous et voyez l'interface utilisateur du serveur Zipkin.

http://localhost:9411/zipkin/

Ensuite, ajoutez la dépendance suivante dans votre application de service client et indiquez l'URL du serveur Zipkin pour suivre les journaux de microservice via l'interface utilisateur Zipkin.

Maintenant, ajoutez la dépendance Spring Cloud Starter Zipkin dans votre fichier de configuration de construction comme indiqué -

Les utilisateurs Maven peuvent ajouter la dépendance suivante dans le fichier pom.xml -

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

Les utilisateurs de Gradle peuvent ajouter la dépendance ci-dessous dans le fichier build.gradle -

compile('org.springframework.cloud:spring-cloud-sleuth-zipkin')

Maintenant, ajoutez le Always Sampler Bean dans votre application Spring Boot pour exporter les journaux vers le serveur Zipkin.

@Bean
public AlwaysSampler defaultSampler() {
   return new AlwaysSampler();
}

Si vous ajoutez le bean AlwaysSampler, l'option d'exportation Zipkin de Spring Sleuth passera automatiquement de false à true.

Ensuite, configurez l'URL de base de votre serveur Zipkin dans le fichier application.properties du service client.

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

Ensuite, fournissez l'ID de trace et recherchez les traces dans l'interface utilisateur Zipkin.

http://localhost:9411/zipkin/traces/{traceid}/