查看原文
其他

微服务链路监控 Spring Cloud Sleuth 详解

点击关注公众号,Java干货及时送达👇

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-serverSpring Cloud Sleuth 整合Zipkin的服务端
  • zipkin-service:受zipkin server监控的服务提供者,实际中为一个微服务。
  • zipkin-another-service:受zipkin server监控的服务提供者,实际中为一个微服务,这里模拟服务之间的相互调用
2.1.2 整体步骤
  • 实现zipkin-server:引入zipkin-serverzipkin-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-serverzipkin-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
来源:blog.csdn.net/crave_shy/article/details/82808477

推荐阅读

最近面试BAT,整理一份面试资料Java面试BATJ通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。

PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我呀,谢谢啦!😀
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存