简介
在微服务架构下存在多个服务之间的相互调用, 当某个请求变慢或不可用时, 我们如何快速定位服务故障点呢? 链路追踪的实现就是为了解决这一问题, 本文采用 Sleuth+Zipkin+RabbitMQ+ES+Kibana 实现.
Spring Cloud Sleuth
Trace: 从客户端请求到系统边界, 再到系统边界返回客户端响应.
Span: 每一次调用埋入一个调用记录, 即为 "Span", 一系列有序的 Span 构成一个 Trace.
Zipkin
Zipkin 是由 Twitter 公司开源的一个分布式追踪系统, 用于收集服务的定时数据, 实现数据的收集, 存储, 查找和展现. 提供了可插拔的数据存储方式: In-Memory,MySQL,Cassandra 以及 Elasticsearch.
RabbitMQ
RabbitMQ 是一个开源的 AMQP 实现, 服务器端用 Erlang 语言编写, 支持多种客户端, 用于在分布式系统中存储转发消息, 在易用性, 扩展性, 高可用性等方面表现不俗.
Elasticsearch
Elasticsearch(ES) 是一个基于 Lucene 构建的开源, 分布式, RESTful 接口的全文搜索引擎. Elasticsearch 还是一个分布式文档数据库, 其中每个字段均可被索引, 而且每个字段的数据均可被搜索, ES 能够横向扩展至数以百计的服务器存储以及处理 PB 级的数据. 可以在极短的时间内存储, 搜索和分析大量的数据.
Kibana
Kibana 可以为 Logstash 和 Elasticsearch 提供友好的日志分析 web 界面, 可以实现汇总, 分析和搜索重要数据日志.
实现
1,Zipkin 服务端
创建 zipkin-server 项目 (也可到官方网站: https://zipkin.io / 下载 jar 包直接使用)
依赖
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- <dependency>
- <groupId>io.zipkin.java</groupId>
- <artifactId>zipkin-server</artifactId>
- <version>2.11.8</version>
- </dependency>
- <dependency>
- <groupId>io.zipkin.java</groupId>
- <artifactId>zipkin-autoconfigure-ui</artifactId>
- <version>2.11.8</version>
- </dependency>
- <dependency>
- <groupId>io.zipkin.java</groupId>
- <artifactId>zipkin-autoconfigure-collector-rabbitmq</artifactId>
- <version>2.11.8</version>
- </dependency>
- <dependency>
- <groupId>io.zipkin.java</groupId>
- <artifactId>zipkin-autoconfigure-storage-Elasticsearch-http</artifactId>
- <version>2.8.4</version>
- </dependency>
配置
- spring:
- application:
- name: zipkin-server
- server:
- port: 8033
- eureka:
- client:
- serviceUrl:
- defaultZone: http://localhost:8088/eureka/
- instance:
- prefer-ip-address: true
- management:
- metrics:
- Web:
- server:
- auto-time-requests: false
- zipkin:
- collector:
- rabbitmq:
- addresses: 192.168.233.128
- port: 5672
- username: zipkin
- password: zipkin
- virtual-host: vh1
- queue: zipkin
- storage:
- StorageComponent: Elasticsearch
- type: Elasticsearch
- Elasticsearch:
- hosts: 192.168.233.171:9200
- cluster: Elasticsearch
- index: zipkin
- index-shards: 5
- index-replicas: 1
启动类
- @SpringBootApplication
- @EnableEurekaClient
- @EnableZipkinServer
- public class ZipkinServerApplication {
- public static void main(String[] args) {
- SpringApplication.run(ZipkinServerApplication.class, args);
- }
- }
访问
2,Zipkin 客户端
依赖
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-amqp</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-sleuth</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-zipkin</artifactId>
- </dependency>
配置
- spring:
- sleuth:
- sampler:
- probability: 1.0
- zipkin:
- sender:
- type: RABBIT
- rabbitmq:
- addresses: 192.168.233.128
- port: 5672
- username: zipkin
- password: zipkin
- virtual-host: vh1
3, 测试:
访问 zipkin 客户端服务, 如我本地 user-server
查看 zipkin 服务端
访问 Kibana, 配置一个 index pattern
修改默认时间格式
看一下效果
END
来源: https://www.cnblogs.com/huangxy/p/11106065.html