1. 简介
Spring Cloud Sleuth implements a distributed tracing solution for Spring Cloud.
微服务的调用链监控是解决微服务的复杂性带来的一系列问题的强有效手段之一,其监控原理、必要性、更多理解以及理论知识入门请查看:
https://blog.csdn.net/crave_shy/article/details/81365668
2. 代码实现
2.1 涉及的模块及整体步骤
2.1.1 涉及的模块
-
zipkin-server: Spring Cloud Sleuth
整合Zipkin的服务端 -
zipkin-service:受 zipkin server
监控的服务提供者,实际中为一个微服务。 -
zipkin-another-service:受 zipkin server
监控的服务提供者,实际中为一个微服务,这里模拟服务之间的相互调用
2.1.2 整体步骤
-
实现zipkin-server:引入 zipkin-server
、zipkin-autoconfigure-ui
,指定端口 -
实现zipkin-service:引入 spring-cloud-starter-zipkin
,指定zipkin server
服务端信息,同时配置自己的应用名称与端口,应用名称很重要,需要全局唯一,用于在zipkin上定位针对当前服务的跟踪信息。 -
实现zipkin-another-service:引入 spring-cloud-starter-zipkin
,指定zipkin server
服务端信息,同时配置自己的应用名称与端口,应用名称很重要,需要全局唯一,用于在zipkin上定位针对当前服务的跟踪信息。 -
启动三个项目,浏览器方式调用两个服务提供者提供的服务,服务提供者内部会通过 RestTemplate
访问另一个服务,产生调用链关系 -
观察 zipkin server
的管理界面,查看调用关系
2.2 源代码
2.2.1 Github地址
https://github.com/andyChenHuaYing/spring-cloud-demo
2.3 zipkin-service
2.3.1 整体实现
-
pom.xml
文件中引入依赖引入zipkin-server
、zipkin-autoconfigure-ui
,指定端口 -
application.yml
中指定具体配置信息 -
ZipkinServerApplication
使用注解@EnableZipkinServer
开启zipkin server
功能
2.3.2 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">
<parent>
<artifactId>spring-cloud-finchley-demo</artifactId>
<groupId>org.oscar.scd</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zipkin-server</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>
<!-- https://mvnrepository.com/artifact/io.zipkin.java/zipkin-server -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.zipkin.java/zipkin-autoconfigure-ui -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.4</version>
</dependency>
</dependencies>
</project>
2.3.3 application.yml
server:
port: 8777
management:
metrics:
web:
server:
auto-time-requests: false
2.3.4 ZipkinServerApplication
package org.oscar.scd.zipkin.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin2.server.internal.EnableZipkinServer;
@EnableZipkinServer
@SpringBootApplication
public class ZipkinServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinServerApplication.class, args);
}
}
2.4 zipkin-service
2.4.1 整体实现
-
pom.xml:引入 spring-cloud-starter-zipkin
-
application.yml:指定 zipkin server
服务端信息,同时配置自己的应用名称与端口,应用名称很重要,需要全局唯一,用于在zipkin上定位针对当前服务的跟踪信息。 -
ZipkinServiceApplication:Spring boot启动类,通过 RestTemplate
调用zipkin-another-service
提供的REST服务
2.4.2 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">
<parent>
<artifactId>spring-cloud-finchley-demo</artifactId>
<groupId>org.oscar.scd</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zipkin-service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
</dependencies>
</project>
2.4.3 application.yml
probability: 1#日志采集率,从0到1依次提高,1标识每次都采集
server:
port: 8778
spring:
zipkin:
base-url: http://localhost:8777
application:
name: zipkin-service
sleuth:
sampler:
probability: 1
2.5 zipkin-another-service
基本与 zipkin-service相同,端口与应用名称不同,提供的REST接口返回值不同
2.5.1 整体实现
-
pom.xml:引入 spring-cloud-starter-zipkin
-
application.yml:指定 zipkin server
服务端信息,同时配置自己的应用名称与端口,应用名称很重要,需要全局唯一,用于在zipkin上定位针对当前服务的跟踪信息。 -
ZipkinAnotherServiceApplication:Spring boot启动类,通过 RestTemplate
调用zipkin-service
提供的REST服务
2.5.2 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">
<parent>
<artifactId>spring-cloud-finchley-demo</artifactId>
<groupId>org.oscar.scd</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zipkin-service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
</dependencies>
</project>
2.5.3 application.yml
probability: 1#日志采集率,从0到1依次提高,1标识每次都采集
server:
port: 8779
spring:
zipkin:
base-url: http://localhost:8777
application:
name: zipkin-another-service
sleuth:
sampler:
probability: 1
3. 验证
3.1 创建SpringBoot启动类
最简单的方式添加一个SpringBoot启动类型的启动类就行,如果对SpringBoot有所了解或者看过前面系列的文章,这里很简单。
3.1.1 ZipkinServerApplication
略
3.1.2 ZipkinServiceApplication
略
3.1.3 ZipkinAnotherServiceApplication
略
3.2 启动
-
ZipkinServerApplication -
ZipkinServiceApplication -
ZipkinAnotherServiceApplication
3.3 查看zipkin-server服务信息界面
3.4 服务相互调用
3.4.1 访问zipkin-service
访问链接http://localhost:8778/serviceName
,返回zipkin-another-service
提供的REST服务返回值。
Hi i am zipkin-another-service
3.4.2 访问zipkin-another-service
访问链接http://localhost:8779/serviceName
,返回zipkin-service
提供的REST服务返回值。
Hi i am zipkin-service
此时已经产生服务调用链。zipkin-service -> zipkin-another-service;zipkin-another-service -> zipkin-service
两个。
3.5 界面查看调用情况
参考如下界面,查看zipkin-service
调用链情况,一个是整体调用情况

另一个点进去可以查看所点击的调用链的详细调用信息

4. 思考
-
刚入门,调用信息单薄 -
如何监控微服务整条链路信息,如网络、服务调用链、数据库、缓存并且支持多种展示形式,如报表,数据 -
当数据量上来之后如何快速查询想要的信息 -
还有没有其他的微服务监控体系,如ELK如何在实际生产中实时
参考
-
http://cloud.spring.io/spring-cloud-static/Finchley.SR1/multi/multi_spring-cloud.html -
https://blog.csdn.net/crave_shy/article/details/81365668
推荐
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
原文始发于微信公众号(Java知音):微服务链路监控 Spring Cloud Sleuth 详解
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/37977.html