百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Springboot(三十七)跟踪微服务日志

toyiye 2024-06-21 12:32 10 浏览 0 评论

如果应用程序在运行过程发生问题,大多数开发人员都难以跟踪日志。 这可以通过用于Spring Boot应用程序的Spring Cloud Sleuth和ZipKin服务器来解决。

Spring Cloud Sleuth

Spring cloud Sleuth日志以下列格式打印 -

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

在上面格式中,

Application-name = 应用程序的名称

Traceid = 每个请求和响应traceid在调用相同服务或一个服务到另一个服务时是相同的。

Spanid = Span Id与Trace Id一起打印。对于将一个服务调用到另一个服务的每个请求和响应,Span Id都不同。

Zipkin-export = 默认情况下为false。 如果是,则将日志导出到Zipkin服务器。

现在,在构建配置文件中添加Spring Cloud Starter Sleuth依赖项,如下所示 -

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-sleuth</artifactId>

</dependency>

Gradle用户可以在build.gradle 文件中添加以下依赖项 -

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

现在,将Logs添加到Spring Boot应用程序Rest Controller类文件中,如下所示 -

package com.felix.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.felix</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.felix'

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文件,并使用以下Maven或Gradle命令运行Spring Boot应用程序。

对于Maven,可以使用以下命令 -

mvn clean install

在“BUILD SUCCESS” 之后,可以在目标目录下找到JAR文件。

对于Gradle,可以使用以下命令 -

gradle clean build

在“BUILD SUCCESSFUL” 之后,可以在build/libs 目录下找到JAR文件。

现在,使用以下命令运行JAR文件 -

java –jar <JARFILE>

现在,在Web浏览器中的URL => http://localhost:8080/ ,然后在控制台日志中查看输出。

在控制台窗口中看到以下日志,日志以下列格式打印[application-name,traceid,spanid,zipkin-export]。

Zipkin服务器

Zipkin是一个监视和管理Spring Boot应用程序的Spring Cloud Sleuth日志的应用程序。 要构建Zipkin服务器,需要在构建配置文件中添加Zipkin UI和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。

对于属性(properties)文件用户,请在application.properties文件中添加以下属性。

server.port = 9411

对于YAML用户,请在application.yml 文件中添加以下属性。

server:

port: 9411

在主Spring Boot应用程序类文件中添加@EnableZipkinServer注解。@EnableZipkinServer注释用于使应用程序充当Zipkin服务器。

package com.felix.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.felix</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.felix'

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文件,并使用下面的Maven或Gradle命令运行Spring Boot应用程序 -

对于Maven,请使用下面给出的命令 -

mvn clean install

在“BUILD SUCCESS”之后,可以在target目录下找到JAR文件。

对于Gradle,请使用下面给出的命令 -

gradle clean build

在“BUILD SUCCESSFUL”之后,可以在build/libs目录下找到JAR文件。

使用显示的命令运行JAR文件 -

java –jar <JARFILE>

现在,应用程序已在Tomcat端口9411上启动。

现在,访问URL => http://localhost:9411/zipkin/ ,并查看Zipkin服务器UI。

然后,在客户端服务应用程序中添加以下依赖项,并指出Zipkin Server URL以通过Zipkin UI跟踪微服务日志。

现在,在构建配置文件中添加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')

现在,在Spring Boot应用程序中添加Always Sampler Bean,将日志导出到Zipkin服务器。

@Bean

public AlwaysSampler defaultSampler() {

return new AlwaysSampler();

}

如果添加AlwaysSampler Bean,则自动Spring Sleuth Zipkin Export选项将从false更改为true。

接下来,在客户端服务application.properties 文件中配置Zipkin Server基本URL。

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

然后,提供跟踪ID并在Zipkin UI中查找跟踪。

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

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码