springCloud微服務之鏈路追蹤zipkin+elk

為什麼需要微服務鏈路追蹤?如果有成百上千個微服務在運行,然後每個服務之間都在互相調用甚至調用層級很深,而且每個微服務都會部署到不同的服務器上面,這其中就有很多硬件因素網絡因素等,如何知道那個微服務調用慢?如何知道那個微服務調用出錯了呢?這一切的處理就需要微服務鏈路追蹤zipkin幫我們追蹤和監控,可以很快地排查出那個服務過慢或者出現異常。

本節採用zipkin利用rabbitmq通道接收日誌再利用es(elasticsearch)存儲輸出給kibana展示篩選

1、安裝zipkin,rabbitmq,elk

docker安裝zipkin,docker-compose完整yml內容如下

version: '3'
services:
 # The zipkin process services the UI, and also exposes a POST endpoint that
 # instrumentation can send trace data to. Scribe is disabled by default.
 zipkin:
 image: openzipkin/zipkin:2.17
 container_name: zipkin
 environment:
 STORAGE_TYPE: elasticsearch
 ES_HOSTS: 192.168.113.168:9200
 RABBIT_ADDRESSES: 192.168.113.168:5672
 # Point the zipkin at the storage backend
 TZ: Asia/Shanghai
 # Uncomment to enable scribe
 # - SCRIBE_ENABLED=true
 # Uncomment to enable self-tracing
 # - SELF_TRACING_ENABLED=true
 # Uncomment to enable debug logging
 # - JAVA_OPTS=-Dlogging.level.zipkin=DEBUG -Dlogging.level.zipkin2=DEBUG
 network_mode: host
 ports:
 # Port used for the Zipkin UI and HTTP Api
 - 9411:9411
 # Uncomment if you set SCRIBE_ENABLED=true
 # - 9410:9410
 #networks: 
 # - default 
 # - my_net #創建網路 docker network create my_net 刪除網絡 docker network rm my_net
#networks: 
 #my_net: 
 #external: true

rabbitmq的安裝比較簡單,網上找找就好了

elk也可以採用docker-compose安裝

2、在用戶中心微服務添加相關依賴

這裡有註釋掉的代碼,這部分呢是將日誌給logstash收集用的,如果是其他的日誌呢,可以採用logstash做收集,這裡需要用的日誌是微服務鏈路追蹤,所以zipkin更加合適,關於logstash的日誌收集沒有說,但是配置文件都有相應的配置,也比較簡單。

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

3、修改用戶中心下的配置文件

首先修改application.yml文件,完整內容如下

sleuth.sampler.probability是採樣率,默認是0.1,這種日誌數據量會很大,所以酌情設置zipkin.sender.type 是日誌發送方式,採用rabbitmq發送

server:
 port: 8884
eureka:
 client:
 service-url:
 defaultZone: http://cloud-eureka:8801/eureka/
 instance:
 prefer-ip-address: true
management:
 endpoints:
 web:
 exposure:
 include: health,info,hystrix.stream
logging:
 level:
 root: INFO
 org.springframework.web.servlet.DispatcherServlet: DEBUG
spring:
 rabbitmq:
 host: apg-server
 port: 5672
 username: guest
 password: guest
 sleuth:
 sampler:
 probability: 1.0
 zipkin:
 sender:
 type: rabbit 

將spring.application.name挪到bootstrap.yml文件中,因為logback的配置文件需要用到

spring:
 application:
 name: cloud-user-center

新建logback-spring.xml配置文件,這個文件在本文章中沒有用到,因為沒有用logstash收集日誌,這裡貼出來配置可以參考參考


 
 ​
 
  
 
 ​
 
  
 
 
  
 DEBUG
 
 
 ${CONSOLE_LOG_PATTERN}
 utf8
 
 
  
 
 ${LOG_FILE}
 
 ${LOG_FILE}.%d{yyyy-MM-dd}.gz
 7
 
 
 ${CONSOLE_LOG_PATTERN}
 utf8
 
 
 ​
  
  
 ​
 
 
  
  
 

4、啟動zipkin,rabbitmq,elk以及所有微服務

springCloud微服務之鏈路追蹤zipkin+elk

5、通過網關地址訪問用戶中心獲取訂單列表的功能

你的本地地址和端口號/api/userCenter/userOrderList/1

6、打開zipkin查看追蹤信息

可以看到調用所花費的時間,以及相關依賴

springCloud微服務之鏈路追蹤zipkin+elk

7、再打開kibana查看es的日誌信息

以下信息是zipkin的索引,默認是沒有的,需要在設置裡面添加該索引。

springCloud微服務之鏈路追蹤zipkin+elk

在這裡就可以看到zipkin收集過來的日誌了

springCloud微服務之鏈路追蹤zipkin+elk

用docker部署的時候會採用服務編排的方式,所有服務和服務之間的調用是採用服務名,原來的代碼中採用的宿主機名,這裡需要修改為服務名為docker微服務化做好鋪墊

#在開發機器hosts文件中加入以下映射
192.168.113.168 apg-server mysql-db

現在就已經將微服務鏈路追蹤的日誌輸出給了es和kibana來查看,這樣的日誌量會非常大,es是很好的選擇,源碼中很多配置文件和依賴都有所改動,主要是為了docker化做支持,後面將是微服務的部署內容,如何將這些微服務利用docker進行快速部署以及利用maven自動打包鏡像


分享到:


相關文章: