Spring Cloud --- sleuth + zipkin

文章目录

  • sleuth + zipkin
  • 一、sleuth 链路跟踪
    • 1.1 微服务中添加 spring cloud sleuth 依赖
    • 1.2 在控制台查看链路跟踪日志
  • 二、sleuth + zipkin 链路分析
    • 2.1 链路数据抽样比例
    • 2.2 zipkin 服务
      • 2.2.1 下载 zipkin 服务器
      • 2.2.2 启动 zipkin 时,连接到 rabbitmq
    • 2.3 微服务添加 zipkin 起步依赖
    • 2.4 启动并访问服务,访问 zipkin 查看链路分析
  • 三、提供者向eureka注册正确的ip地址
    • 3.1 选择正确网卡
    • 3.2 注册ip地址,而不是主机名

sleuth + zipkin

链路跟踪

通过监控图表,可以直观的看到业务调用执行的整条链路,都经历了哪些服务,哪些服务运行缓慢、进行了重试…都可以观察到

  • sleuth:在服务中产生链路跟踪日志
  • zipkin: 接收链路跟踪日志,进行分析、展现

一、sleuth 链路跟踪

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

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

1.1 微服务中添加 spring cloud sleuth 依赖

修改以下微服务的 pom.xml,添加 sleuth 依赖

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

编辑起步依赖,分别 `sleuth 依赖
Spring Cloud --- sleuth + zipkin_第1张图片

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

启动顺序:eureka---->config---->zuul---->其他的

1.2 在控制台查看链路跟踪日志

  • 通过 zuul 网关,访问 order-service
    http://localhost:7001/order-service/5u6i5u4yu4y54

  • 四个微服务的控制台日志中,可以看到以下信息:
    [服务id,请求id,span id,是否发送到zipkin]

  • 请求id: 请求到达第一个微服务时生成一个请求id,该id在调用链路中会一直向后面的微服务传递

  • span id: 链路中每一步微服务调用,都生成一个新的id

[zuul,6c24c0a7a8e7281a,6c24c0a7a8e7281a,false]

[order-service,6c24c0a7a8e7281a,993f53408ab7b6e3,false]

[item-service,6c24c0a7a8e7281a,ce0c820204dbaae1,false]

[user-service,6c24c0a7a8e7281a,fdd1e177f72d667b,false]

在这里插入图片描述

二、sleuth + zipkin 链路分析

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

2.1 链路数据抽样比例

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

spring:
  sleuth:
    sampler:
      probability: 0.1

链路日志发送到zipkin的方法:

  • ① 直接连接 zipkin 服务器
  • ② 先发送到 Rabbitmq,由Rabbitmq 再发到zipkin

② 方法更好,解耦

2.2 zipkin 服务

2.2.1 下载 zipkin 服务器

  • https://github.com/openzipkin/zipkin

Spring Cloud --- sleuth + zipkin_第2张图片

2.2.2 启动 zipkin 时,连接到 rabbitmq

java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:[email protected]:5672
Spring Cloud --- sleuth + zipkin_第3张图片

http://localhost:9411/zipkin
Spring Cloud --- sleuth + zipkin_第4张图片

2.3 微服务添加 zipkin 起步依赖

修改以下微服务

  • sp02-item-service
  • sp03-user-service
  • sp04-order-service
  • sp11-zuul
<dependency>
   <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

检查一下application.yml

spring
  rabbitmq:
    host: 192.168.64.140
    port: 5672
    username: admin
    password: admin

流程汇总:

  1. 添加 rabbitmq 依赖
  2. 添加 zipkin 客户端依赖,它会连接rabbitmq,向zipkin使用的一个固定队列发送日志
  3. 添加rabbitmq的连接信息
    修改 config-files 中的四个yml文件
  4. 设置发送链路日志的类型:rabbitmq
    修改 config-files 中的四个yml文件: spring.zipkin.sender.type=rabbit
  5. config-files 提交、推送到远程仓库

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

  • http://localhost:7001/order-service/112233
    刷新访问多次,链路跟踪数据中,默认只有 10% 会被收集到zipkin

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

Spring Cloud --- sleuth + zipkin_第5张图片
Spring Cloud --- sleuth + zipkin_第6张图片
Spring Cloud --- sleuth + zipkin_第7张图片

三、提供者向eureka注册正确的ip地址

  • eureka客户端向eureka注册时, 会自动选择网卡, 选择第一个不是 localhost 的网卡;
  • 注册ip还是主机名,通过自动选择来确定;
  • 下面配置可以选择正确网卡的ip向eureka进行注册;

3.1 选择正确网卡

服务器有多块网卡,要选择正确网卡的ip地址向eureka进行注册

修改 bootstrap.yml

spring:
  cloud:
    inetutils:
      ignored-interfaces: # 忽略的网卡
        - VM.*
      preferred-networks: # 要是用的网卡的网段
        - 192.168.0

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

注册时,有可能自动选择主机名进行注册,而不使用ip地址. 主机名在局域网内有可能不会被正确的解析

最好使用ip地址进行注册,而不注册主机名

在应用配置application.yml中配置:

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

你可能感兴趣的:(微服务,spring)