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自动打包镜像


分享到:


相關文章: