SpringCloud极简入门(十四)服务链路追踪(Spring Cloud Sleuth)

本文作者:陈刚,叩丁狼高级讲师。原创文章,转载请注明出处。

一.为什么需要服务链路追踪

我们知道微服务架构就是按照功能模块把我们的应用抽取成一个一个独立的服务,而服务和服务之间相互调用,相互影响,一个服务可能会去调用很多个其他的服务,由于服务数量众多 ,业务复杂性比较高,如果出现异常或错误,我们很难快速精确的去定位到问题服务,所以在微服务的架构中,必须实现分布式链路追踪,去追踪出每一个服务每一个请求到底有哪些服务的参与,请求路线到底是如何执行的,从而让我们服务之间的调用关系清晰可见,出现问题也能够快速进行定位。本章主要讲述在Spring Cloud Sleuth中集成Zipkin ,常见的链路追踪组件有:阿里的Eagleeye等,Twitter的Zipkin等

二. 链路追踪服务中心

链路追踪的实现和服务注册有点类似 ,我们需要创建一个链路追踪服务中心去负责追踪,和存储这些服务之间的链路数据。而我们的每个服务需要配置链路追踪服务中心地址,指向服务中心。实现链路追踪原理也很简单,

创建链路追踪服务中心

1.搭建SpringBoot应用 server-zipkin ,引入zipkin 相关依赖

pom.ml如下:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.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>Finchley.SR1</spring-cloud.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
            <version>2.10.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.10.4</version>
        </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>

2.在主程序启动类上打上 @EnableZipkinServer 标签,开启: 链路追踪服务功能如下:

/**

*   开启:[@EnableZipkinServer](https://github.com/EnableZipkinServer "@EnableZipkinServer") 链路追踪服务
    */
    [@SpringBootApplication](https://github.com/SpringBootApplication "@SpringBootApplication")
    [@EnableZipkinServer](https://github.com/EnableZipkinServer "@EnableZipkinServer")
    public class ServerZipkinApplication {
public static void main(String[] args) {
    SpringApplication.run(ServerZipkinApplication.class, args);
}

}

>3.配置application.properties(后面的应用可能会用properties进行配置,当然用yml进行配置也没任何问题无需在意)配置端口:

server.port=7777

#### 四.链路追踪客户端
>我们需要修改我们的服务作为链路追踪客户端,使用spring:zipkin:
    base-url配置指向我们的链路追踪服务中心,这样链路追踪服务中心就可以跟踪,记录到服务之间的请求链路等信息。我这里在之前的应用基础上选用了一个消费者服务和一个生产者服务做修改,他们之间是有调用关系的。
##### 1.修改consumer,增加依赖基本依赖 : spring-cloud-starter-zipkin如下:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

##### 2.增加配置spring:zipkin:base-url:如下:

eureka:
client:
serviceUrl:
defaultZone: http://localhost:1111/eureka/ #服务地址
server:
port: 3333
spring:
application:
name: consumer1
zipkin:
base-url: http://localhost:7777

feign:

hystrix:

enabled: true


##### 3.修改producer 服务,增加 依赖和配置同上

#### 五.测试

> 分别启动 server-zipkin ,eureka-server和 producer ,consumer ,通过访问consumer 实现调用 producer ,
> 访问:[http://localhost:3333/consumer?name=xx](http://localhost:3333/consumer?name=xx) ,然后看到 “xx:你好呀这里是Producer服务”
> 再访问链路追踪服务中心监控地址:[http://localhost:7777/zipkin/](http://localhost:7777/zipkin/) 你可以看到服务调用情况:
> ![image.png](http://upload-images.jianshu.io/upload_images/807144-fcbd4ed7dab6fcd5?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
> 
> 关键词解释:
> Span :基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识
> Trace:多个spans组成的一个树状结构
> 点击 Dependencies可以看到链路图如下:
> ![image.png](http://upload-images.jianshu.io/upload_images/807144-cc230b892a04d86a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![叩丁狼教育.jpg](https://upload-images.jianshu.io/upload_images/807144-000d1c94a7834f53.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容