SpringCloud(七)--Sleuth+Zipkin&Bus消息總線

sleuth 鏈路跟蹤

隨着系統規模愈來愈大,微服務之間調用關係變得錯綜複雜,一條調用鏈路中可能調用多個微服務,任何一個微服務不可用均可能造整個調用過程失敗java

spring cloud sleuth 能夠跟蹤調用鏈路,分析鏈路中每一個節點的執行狀況git

微服務中添加 spring cloud sleuth 依賴

修改如下微服務的 pom.xml,添加 sleuth 依賴github

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

編輯起步依賴,分別 sleuth 依賴
編輯起步依賴web

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

在控制檯查看鏈路跟蹤日誌

四個微服務的控制檯日誌中,能夠看到如下信息:
[服務id,請求id,span id,是否發送到zipkin]spring

  • 請求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]bootstrap

sleuth + zipkin 鏈路分析

sleuth

生成鏈路跟蹤日誌的工具服務器

zipkin

能夠收集鏈路跟蹤數據,提供可視化的鏈路分析app

  • 添加 sleuth 只須要添加它的依賴,它是自動配置的
  • 添加 zipkin 客戶端依賴、amqp依賴
  • yml 添加rabbitmq的鏈接信息
  • yml配置日誌發送方式:rabbitmq

鏈路數據抽樣比例

默認 10% 的鏈路數據會被髮送到 zipkin 服務。能夠配置修改抽樣比例spring-boot

spring:
  sleuth:
    sampler:
      probability: 0.1

zipkin 服務

下載 zipkin 服務器

下載zipkin

啓動 zipkin 時,鏈接到 rabbitmq

java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672微服務

啓動

zipkin

微服務添加 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>

若是沒有配置過 spring cloud bus,還須要添加 rabbitmq 依賴和鏈接信息

啓動並訪問服務,訪問 zipkin 查看鏈路分析

zipkin

zipkin

zipkin

向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 消息總線配置刷新

bus

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個項目
編輯起步依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>

配置文件中添加 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

刷新端點

啓動服務,請求刷新端點發布刷新消息

啓動服務

注意:

config 本地文系統

能夠把配置文件保存在配置中心服務的 resources 目錄下,直接訪問本地文件

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

本地目錄

修改 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
相關文章
相關標籤/搜索