Большинство разработчиков сталкиваются с трудностями отслеживания журналов, если возникла какая-либо проблема. Это может быть решено с помощью Spring Cloud Sleuth и сервера ZipKin для приложения Spring Boot.
Весеннее Облако
Журналы Spring Cloud Sleuth печатаются в следующем формате —
[application-name,traceid,spanid,zipkin-export]
Куда,
-
Application-name = название приложения
-
Traceid = каждый запрос и ответ traceid одинаковы при вызове одной и той же службы или одной службы другой службе.
-
Spanid = Span Id печатается вместе с Trace Id. Span Id отличается при каждом запросе и ответе, вызывающем один сервис к другому сервису.
-
Zipkin-export = По умолчанию это false. Если это правда, логи будут экспортированы на сервер Zipkin.
Application-name = название приложения
Traceid = каждый запрос и ответ traceid одинаковы при вызове одной и той же службы или одной службы другой службе.
Spanid = Span Id печатается вместе с Trace Id. Span Id отличается при каждом запросе и ответе, вызывающем один сервис к другому сервису.
Zipkin-export = По умолчанию это false. Если это правда, логи будут экспортированы на сервер Zipkin.
Теперь добавьте зависимость Spring Cloud Starter Sleuth в файл конфигурации сборки следующим образом:
Пользователи Maven могут добавить следующую зависимость в ваш файл pom.xml:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
Пользователи Gradle могут добавить следующую зависимость в ваш файл build.gradle:
compile('org.springframework.cloud:spring-cloud-starter-sleuth')
Теперь добавьте журналы в файл класса Rest Controller приложения Spring Boot, как показано здесь —
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!"; } }
Теперь добавьте имя приложения в файл application.properties, как показано ниже:
spring.application.name = tracinglogs
Полный код для файла конфигурации сборки приведен ниже —
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}" } }
Вы можете создать исполняемый файл JAR и запустить приложение Spring Boot, используя следующие команды Maven или Gradle.
Для Maven вы можете использовать следующую команду —
mvn clean install
После «BUILD SUCCESS» вы можете найти файл JAR в целевом каталоге.
Для Gradle вы можете использовать следующую команду —
gradle clean build
После «BUILD SUCCESSFUL» вы можете найти файл JAR в каталоге build / libs.
Теперь запустите файл JAR с помощью команды, показанной здесь —
java –jar <JARFILE>
Теперь приложение запущено на порт Tomcat 8080.
Теперь нажмите URL-адрес в веб-браузере и просмотрите результаты в журнале консоли.
HTTP: // локальный: 8080 /
Вы можете увидеть следующие журналы в окне консоли. Обратите внимание, что журнал печатается в следующем формате [имя-приложения, traceid, spanid, zipkin-export]
Zipkin Server
Zipkin — это приложение, которое отслеживает и управляет журналами Spring Cloud Sleuth вашего приложения Spring Boot. Чтобы построить сервер Zipkin, нам нужно добавить зависимости пользовательского интерфейса Zipkin и Zipkin Server в наш файл конфигурации сборки.
Пользователи Maven могут добавить следующую зависимость в ваш файл 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>
Пользователи Gradle могут добавить следующую зависимость в ваш файл build.gradle —
compile('io.zipkin.java:zipkin-autoconfigure-ui') compile('io.zipkin.java:zipkin-server')
Теперь настройте server.port = 9411 в файле свойств приложения.
Для пользователей файла свойств добавьте следующее свойство в файл application.properties.
server.port = 9411
Для пользователей YAML добавьте следующее свойство в файл application.yml.
server: port: 9411
Добавьте аннотацию @EnableZipkinServer в основной класс приложения Spring Boot. Аннотация @EnableZipkinServer используется для того, чтобы приложение могло работать в качестве сервера 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); } }
Код для полного файла конфигурации сборки приведен ниже.
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}" } }
Вы можете создать исполняемый файл JAR и запустить приложение Spring Boot с помощью приведенных ниже команд Maven или Gradle —
Для Maven используйте команду, приведенную ниже —
mvn clean install
После «BUILD SUCCESS» вы можете найти файл JAR в целевом каталоге.
Для Gradle используйте команду, приведенную ниже —
gradle clean build
После «BUILD SUCCESSFUL» вы можете найти файл JAR в каталоге build / libs.
Запустите файл JAR с помощью показанной команды —
java –jar <JARFILE>
Теперь приложение запущено на порт Tomcat 9411, как показано ниже:
Теперь перейдите по указанному ниже URL-адресу и увидите пользовательский интерфейс Zipkin-сервера.
HTTP: // локальный: 9411 / Зипкин /
Затем добавьте следующую зависимость в свое приложение-службу клиента и укажите URL-адрес Zipkin Server, чтобы отслеживать журналы микросервиса через пользовательский интерфейс Zipkin.
Теперь добавьте зависимость Spring Cloud Starter Zipkin в файл конфигурации сборки, как показано ниже:
Пользователи Maven могут добавить следующую зависимость в файл pom.xml —
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>
Пользователи Gradle могут добавить следующую зависимость в файл build.gradle —
compile('org.springframework.cloud:spring-cloud-sleuth-zipkin')
Теперь добавьте bean-компонент Always Sampler в приложение Spring Boot, чтобы экспортировать журналы на сервер Zipkin.
@Bean public AlwaysSampler defaultSampler() { return new AlwaysSampler(); }
Если вы добавите bean-компонент AlwaysSampler, то параметр экспорта Spring Sleuth Zipkin автоматически изменится с false на true.
Затем настройте базовый URL-адрес сервера Zipkin в файле application.properties клиентской службы.
spring.zipkin.baseUrl = http://localhost:9411/zipkin/
Затем укажите идентификатор трассировки и найдите ее в пользовательском интерфейсе Zipkin.
HTTP: // локальный: 9411 / Зипкин / следы / {traceid} /