背景
微服务架构下,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败,为了快速定位和解决问题,需要追踪服务请求序列,分布式链路监控组件在这种需求下产生。
服务链路
解决的问题
跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,是调试和监控微服务的关键工具。
4个特点
案列结构图
集成Zipkin使用
Zipkin 提供了链路追踪的可视化 。组成: collector(收集数据) Storage(存储数据)Web UI (界面)。收集数据的方式2种,HTTP(同步)和MQ(异步),默认HTTP。
搭建zipkin服务器docker run -d -p 9411:9411 openzipkin/zipkin
访问9411端口
2. 消费端配置
2.1 引入依赖
<!-- 配置服务链路追踪 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
2.2 在配置文件中声明zipkin服务器的地址
spring: rabbitmq: host: localhost port: 9411 username: guest password: guest sleuth: sampler: probability: 1 #默认sleuth收集信息的比率是0.1, 10%
2.3 项目中调用
@RequestMapping("hello") public String helloConsumer() { //使用restTemplate调用消费服务提供者的SERVICE-HI的info服务 //String response=restTemplate.getForObject("http://cloud-consumer-feign/hi", String.class); String response=hiService.sayHello()+" ribbon"; logger.info(response); return response; }
3.优化
3.1 HTTP改为MQ通信
3.1.1 POM 引入依赖
<!-- 将http请求修改为mq请求 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency>
3.1.2 配置MQ
spring: application: name: zipkin-server rabbitmq: #配置mq消息队列 host: localhost port: 5672 username: guest password: guest zipkin: rabbitmq: queue: zipkin
3.2 MySQL(内存数据库)改为ElasticSearch
docker run --name zipkin -d -p 9411:9411 -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=192.168.60.133:9200 openzipkin/zipkin
或者docker-compose
version: '2' services: zipkin: image: openzipkin/zipkin container_name: zipkin environment: - STORAGE_TYPE=elasticsearch - ES_HOSTS=192.168.60.133:9200 #- RABBIT_ADDRESSES=192.168.60.133:5672 #- RABBIT_USER=hangge #- RABBIT_PASSWORD=123 ports: - 9411:9411
改造测试
我们使用谷歌浏览器插件 ElasticSearch Head 查看当前 Elasticsearch 集群的信息。可以发现 Zipkin 跟踪数据已经成功保存进来了。
还没有评论,来说两句吧...