SpringCloud(七)--Sleuth+Zipkin&Bus消息总线

sleuth 链路跟踪

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

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

微服务中添加 spring cloud sleuth 依赖

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

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

编辑起步依赖,分别 sleuth 依赖
编辑起步依赖


    org.springframework.cloud
    spring-cloud-starter-sleuth

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

四个微服务的控制台日志中,可以看到以下信息:
[服务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 链路分析

sleuth

生成链路跟踪日志的工具

zipkin

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

  • 添加 sleuth 只需要添加它的依赖,它是自动配置的
  • 添加 zipkin 客户端依赖、amqp依赖
  • yml 添加rabbitmq的连接信息
  • yml配置日志发送方式:rabbitmq

链路数据抽样比例

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

spring:
  sleuth:
    sampler:
      probability: 0.1

zipkin 服务

下载 zipkin 服务器

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第1张图片

启动 zipkin 时,连接到 rabbitmq

java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:[email protected]:5672

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第2张图片

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第3张图片

微服务添加 zipkin 起步依赖

修改以下微服务

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

    org.springframework.cloud
    spring-cloud-starter-zipkin

如果没有配置过 spring cloud bus,还需要添加 rabbitmq 依赖和连接信息

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

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第4张图片

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第5张图片

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第6张图片

向eureka注册正确的ip地址

eureka客户端向eureka注册时, 会自动选择网卡, 并可能注册主机名而不是ip地址.

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

选择正确网卡

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

修改 bootstrap.yml

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

注册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

config bus + rabbitmq 消息总线配置刷新

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第7张图片

post 请求消息总线刷新端点,服务器会向 rabbitmq 发布刷新消息,接收到消息的微服务会向配置服务器请求刷新配置信息

rabbitmq 安装笔记

需要动态更新配置的微服务,添加 spring cloud bus 依赖,并添加 rabbitmq 连接信息

修改以下微服务

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

pom.xml 添加 spring cloud bus 依赖

使用 STS 编辑起步依赖,分别添加 busrabbitmq 依赖

修改5个项目
编辑起步依赖

 
            org.springframework.boot
            spring-boot-starter-amqp
        
        
            org.springframework.cloud
            spring-cloud-bus
        
        
            org.springframework.cloud
            spring-cloud-stream-binder-rabbit
        
        
            org.springframework.amqp
            spring-rabbit-test
            test
        

配置文件中添加 rabbitmq 连接信息

在以下配置文件中修改:

  • config中的4个配置文件
  • sp12-config项目的application.yml

注意:

  • 连接信息请修改成你的连接信息
  • config项目需要提交
spring:
  ......
  rabbitmq:
    host: 192.168.64.140
    port: 5672
    username: admin
    password: admin

config-server 暴露 bus-refresh 刷新端点

修改 sp12-config 项目的 application.yml, 暴露bus-refresh端点

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第8张图片

启动服务,请求刷新端点发布刷新消息

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第9张图片

注意:

config 本地文系统

可以把配置文件保存在配置中心服务的 resources 目录下,直接访问本地文件

把配置文件保存到 sp12-config 项目的 resources/config 目录下

SpringCloud(七)--Sleuth+Zipkin&Bus消息总线_第11张图片

修改 application.yml 激活 native profile,并指定配置文件目录
  • 必须配置 spring.profiles.active=native 来激活本地文件系统
  • 本地路径默认:[classpath:/, classpath:/config, file:./, file:./config]
spring:
  application:
    name: config-server
  profiles:
    active: native
  
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/config

#        git:
#          uri: https://github.com/你的用户路径/sp-config
#          searchPaths: config
#          username: your-username
#          password: your-password
        
    
  rabbitmq:
    host: 192.168.64.140
    port: 5672
    username: admin
    password: admin

    
server:
  port: 6001
    
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
      
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

你可能感兴趣的:(zipkin)