Spring Boot - Truy tìm nhật ký dịch vụ vi mô
Hầu hết các nhà phát triển gặp khó khăn trong việc truy tìm nhật ký nếu có bất kỳ sự cố nào xảy ra. Điều này có thể được giải quyết bằng máy chủ Spring Cloud Sleuth và ZipKin cho ứng dụng Spring Boot.
Spring Cloud Sleuth
Nhật ký Spring cloud Sleuth được in ở định dạng sau:
[application-name,traceid,spanid,zipkin-export]
Ở đâu,
Application-name = Tên của ứng dụng
Traceid = mỗi yêu cầu và phản hồi theo dõi đều giống nhau khi gọi cùng một dịch vụ hoặc một dịch vụ này đến một dịch vụ khác.
Spanid = Span Id được in cùng với Trace Id. Span Id là khác nhau mọi yêu cầu và phản hồi gọi một dịch vụ đến một dịch vụ khác.
Zipkin-export = Theo mặc định, nó là false. Nếu đúng, nhật ký sẽ được xuất sang máy chủ Zipkin.
Bây giờ, hãy thêm phần phụ thuộc Spring Cloud Starter Sleuth vào tệp cấu hình bản dựng của bạn như sau:
Người dùng Maven có thể thêm phần phụ thuộc sau vào tệp pom.xml của bạn -
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
Người dùng Gradle có thể thêm phần phụ thuộc sau vào tệp build.gradle của bạn -
compile('org.springframework.cloud:spring-cloud-starter-sleuth')
Bây giờ, thêm Nhật ký vào tệp lớp Rest Controller của ứng dụng Spring Boot của bạn như được hiển thị ở đây -
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!";
}
}
Bây giờ, hãy thêm tên ứng dụng vào tệp application.properties như được hiển thị -
spring.application.name = tracinglogs
Mã hoàn chỉnh cho tệp cấu hình bản dựng được cung cấp bên dưới:
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}"
}
}
Bạn có thể tạo tệp JAR thực thi và chạy ứng dụng Spring Boot bằng cách sử dụng các lệnh Maven hoặc Gradle sau.
Đối với Maven, bạn có thể sử dụng lệnh sau:
mvn clean install
Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục đích.
Đối với Gradle, bạn có thể sử dụng lệnh sau:
gradle clean build
Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục build / libs.
Bây giờ, chạy tệp JAR bằng cách sử dụng lệnh hiển thị ở đây -
java –jar <JARFILE>
Bây giờ, ứng dụng đã khởi động trên cổng Tomcat 8080.
Bây giờ, hãy nhấn vào URL trong trình duyệt web của bạn và xem kết quả trong nhật ký bảng điều khiển.
http://localhost:8080/
Bạn có thể xem các nhật ký sau trong cửa sổ bảng điều khiển. Quan sát rằng nhật ký được in ở định dạng sau [tên ứng dụng, theo dõi, spanid, zipkin-export]
Máy chủ Zipkin
Zipkin là một ứng dụng giám sát và quản lý nhật ký Spring Cloud Sleuth của ứng dụng Spring Boot của bạn. Để xây dựng máy chủ Zipkin, chúng ta cần thêm giao diện người dùng Zipkin và các phụ thuộc Máy chủ Zipkin trong tệp cấu hình xây dựng của chúng tôi.
Người dùng Maven có thể thêm phần phụ thuộc sau vào tệp pom.xml của bạn -
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
Người dùng Gradle có thể thêm phần phụ thuộc bên dưới vào tệp build.gradle của bạn -
compile('io.zipkin.java:zipkin-autoconfigure-ui')
compile('io.zipkin.java:zipkin-server')
Bây giờ, hãy cấu hình server.port = 9411 trong tệp thuộc tính ứng dụng.
Đối với người dùng tệp thuộc tính, hãy thêm thuộc tính dưới đây vào tệp application.properties.
server.port = 9411
Đối với người dùng YAML, hãy thêm thuộc tính dưới đây vào tệp application.yml.
server:
port: 9411
Thêm chú thích @EnableZipkinServer vào lớp ứng dụng Spring Boot chính của bạn. Chú thích @EnableZipkinServer được sử dụng để cho phép ứng dụng của bạn hoạt động như một máy chủ 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);
}
}
Mã cho tệp cấu hình bản dựng hoàn chỉnh được cung cấp bên dưới.
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}"
}
}
Bạn có thể tạo tệp JAR có thể thực thi và chạy ứng dụng Spring Boot bằng cách sử dụng lệnh Maven hoặc Gradle bên dưới:
Đối với Maven, hãy sử dụng lệnh dưới đây:
mvn clean install
Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục đích.
Đối với Gradle, hãy sử dụng lệnh dưới đây:
gradle clean build
Sau khi “XÂY DỰNG THÀNH CÔNG”, bạn có thể tìm thấy tệp JAR trong thư mục build / libs.
Chạy tệp JAR bằng cách sử dụng lệnh được hiển thị:
java –jar <JARFILE>
Bây giờ, ứng dụng đã khởi động trên cổng Tomcat 9411 như hình dưới đây -
Bây giờ, hãy nhấn vào URL bên dưới và xem giao diện người dùng máy chủ Zipkin.
http://localhost:9411/zipkin/
Sau đó, thêm phần phụ thuộc sau vào ứng dụng dịch vụ khách hàng của bạn và chỉ ra URL máy chủ Zipkin để theo dõi nhật ký microservice thông qua giao diện người dùng Zipkin.
Bây giờ, thêm phần phụ thuộc Spring Cloud Starter Zipkin vào tệp cấu hình bản dựng của bạn như được hiển thị -
Người dùng Maven có thể thêm phần phụ thuộc sau vào tệp pom.xml:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
Người dùng Gradle có thể thêm phần phụ thuộc bên dưới vào tệp build.gradle -
compile('org.springframework.cloud:spring-cloud-sleuth-zipkin')
Bây giờ, hãy thêm Always Sampler Bean trong ứng dụng Spring Boot của bạn để xuất nhật ký vào máy chủ Zipkin.
@Bean
public AlwaysSampler defaultSampler() {
return new AlwaysSampler();
}
Nếu bạn thêm AlwaysSampler Bean, thì tùy chọn Spring Sleuth Zipkin Export sẽ tự động thay đổi từ false thành true.
Tiếp theo, định cấu hình URL cơ sở Máy chủ Zipkin của bạn trong tệp application.properties của dịch vụ khách.
spring.zipkin.baseUrl = http://localhost:9411/zipkin/
Sau đó, cung cấp id theo dõi và tìm các dấu vết trong Zipkin UI.
http://localhost:9411/zipkin/traces/{traceid}/