1. 概述

随着系统规模越来越大,微服务之间调用关系变得错综复杂,一条调用链路中可能调用多个微服务,任何一个微服务不可用都可能造整个调用过程失败

spring cloud sleuth 可以跟踪调用链路,分析链路中每个节点的执行情况;

zipkin 可以收集链路跟踪数据,提供可视化的链路分析;

链路数据抽样比例默认为 10% 的链路数据会被发送到 zipkin 服务。可以配置修改抽样比例:

spring:   
	sleuth:
    sampler:
      probability: 0.1

2.sleuth 链路跟踪

2.1 添加依赖

修改以下微服务

  • sp02-item-service
  • sp03-user-service
  • sp04-order-service
  • sp06-zuul

添加下面的依赖:

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

2.2 查看链路跟踪日志

通过 zuul 网关,携带token访问 order-service:http://localhost:3001/order-service/sdgsdgsdgsaf,因为设置了随机超时问题, 需要执行多次直至成功:

  • 请求id:请求到达第一个微服务时生成一个请求id,该id在调用链路中会一直向后面的微服务传递
  • span id:链路中每一步微服务调用,都生成一个新的id
    在这里插入图片描述

3.zipkin 服务

3.1 下载 zipkin 服务器

官网:https://github.com/openzipkin/zipkin
在这里插入图片描述

3.2 启动 zipkin 时,连接到 rabbitmq

在zipkin-server-2.24.3-exec.jar文件所在目录下的地址栏中,输入cmd进入命令控制面板,输入命令:java -jar zipkin-server-2.24.3-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672文件启动zipkin控制台:
在这里插入图片描述

在这里插入图片描述

在浏览器中输入http://localhost:9411/zipkin访问其控制台:

在这里插入图片描述

4.微服务添加 zipkin 依赖

4.1 添加依赖

修改以下微服务

  • sp02-item-service
  • sp03-user-service
  • sp04-order-service
  • sp06-zuul

添加下面的依赖:

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

并且在sp06项目中单独添加rabbitmq的依赖:

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

4.2 配置文件修改

通过zipkin客户端向zipkin服务器发送消息有俩种方式:直接发送和中转发送;我们这里配置使用rabbit方式发送:
通过zipkin客户端向zipkin服务器发送消息有俩种方式:直接发送和中转发送;我们在sp06项目中添加下面的配置内容:
在这里插入图片描述

并将配置复制到config目录下的三个文件中,推送到远程仓库中;

4.3 启动并访问服务,访问 zipkin 查看链路分析

访问http://localhost:3001/order-service/112233

  • 刷新访问多次,链路跟踪数据中,默认只有 10% 会被收集到zipkin

访问 zipkin:http://localhost:9411/zipkin

在这里插入图片描述

可以看出,我们这里使用的是简单模式;

5.向eureka注册正确的ip地址

eureka客户端向eureka注册时, 会自动选择网卡, 并可能注册主机名而不是ip地址
在这里插入图片描述

点击上图中的instance-id即可跳转到对应服务的注册地址,在这里我们可以看到相关的注册信息:
在这里插入图片描述

下面配置可以选择正确网卡的ip向eureka进行注册.

5.1 选择正确网卡

服务器有多块网卡,要选择正确网卡的ip地址向eureka进行注册,像主机名或localhost等地址可能会导致无法找到正确的网络地址而连接失败;

在09-config中新建bootstrap.yml配置文件:

spring:
  cloud:
    inetutils:
      ignored-interfaces: # 忽略的网卡
        - VM.* # .是任意字节 *指0到多个
      preferred-networks: # 要使用的网卡的网段
        - 192\.168\.0\..+

因为其必须在引用启动之前进行网络寻址的引导,所以需要配置到bootstrap.yml配置文件中,我们这里指定网络网段即可,指定一个具体的网络地址,可能会因更换接口而导致的寻址失败,为了更兼容的使用,指定网段查找网络地址即可;

5.2 注册ip地址,而不是主机名

并且我们可以配置instance-id显示情况,设置其也已注册地址进行显示:

在09-config应用配置application.yml中配置:

eureka:
  instance:
    prefer-ip-address: true # 使用ip进行注册
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # 界面列表中显示的格式也显示ip

更多推荐