为什么需要微服务链路追踪?如果有成百上千个微服务在运行,然后每个服务之间都在互相调用甚至调用层级很深,而且每个微服务都会部署到不同的服务器上面,这其中就有很多硬件因素网络因素等,如何知道那个微服务调用慢?如何知道那个微服务调用出错了呢?这一切的处理就需要微服务链路追踪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以及所有微服务
5、通过网关地址访问用户中心获取订单列表的功能
你的本地地址和端口号/api/userCenter/userOrderList/1
6、打开zipkin查看追踪信息
可以看到调用所花费的时间,以及相关依赖
7、再打开kibana查看es的日志信息
以下信息是zipkin的索引,默认是没有的,需要在设置里面添加该索引。
在这里就可以看到zipkin收集过来的日志了
用docker部署的时候会采用服务编排的方式,所有服务和服务之间的调用是采用服务名,原来的代码中采用的宿主机名,这里需要修改为服务名为docker微服务化做好铺垫
#在开发机器hosts文件中加入以下映射 192.168.113.168 apg-server mysql-db
现在就已经将微服务链路追踪的日志输出给了es和kibana来查看,这样的日志量会非常大,es是很好的选择,源码中很多配置文件和依赖都有所改动,主要是为了docker化做支持,后面将是微服务的部署内容,如何将这些微服务利用docker进行快速部署以及利用maven自动打包镜像