2.4 配置中心:sleuth 链路跟踪与zipkin 链路分析案例
文章目录
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
更多推荐

所有评论(0)