随着业务发展,系统拆分致使系统调用链路愈发复杂一个前端请求可能最终须要调用不少次后端服务才能完成,当整个请求变慢或不可用时,咱们是没法得知该请求是由某个或某些后端服务引发的,这时就须要解决如何快读定位服务故障点,以对症下药。因而就有了分布式系统调用跟踪的诞生。而zipkin就是开源分布式系统调用跟踪的佼佼者前端
zipkin基于google-Dapper的论文有兴趣的能够看下java
zipkin默认会将链路跟踪数据保存到内存,同时也支持MySql、ElasticSearch等多种持久化插件mysql
以MySql为例,只需在启时加上如下参数便可:spring
java -jar zipkin.jar --zipkin.storage.StorageComponent=mysql --zipkin.storage.type=mysql --zipkin.storage.mysql.host=127.0.0.1--zipkin.storage.mysql.port=3306 --zipkin.storage.mysql.username=root --zipkin.storage.mysql.password=root --zipkin.storage.mysql.db=zipkin_test
--zipkin.storage.StorageComponent=mysql #使用mysql组件
--zipkin.storage.type=mysql #使用mysql持久化
--zipkin.storage.mysql.host #mysql数据库域名
--zipkin.storage.mysql.port=3306 #mysql数据库端口
--zipkin.storage.mysql.username=root #数据库帐号
--zipkin.storage.mysql.password=root #数据库密码
--zipkin.storage.mysql.db=zipkin_test #库名
本文使用Brave做为Tracer实现,使用spring-cloud的小伙伴能够选择spring-cloud-sleuth
引入Bravesql
<dependencyManagement> <dependencies> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-bom</artifactId> <version>${brave.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<dependency> <groupId>io.opentracing.brave</groupId> <artifactId>brave-opentracing</artifactId> <version>0.31.0</version> </dependency> <dependency> <groupId>io.zipkin.reporter2</groupId> <artifactId>zipkin-sender-okhttp3</artifactId> <version>2.6.1</version> </dependency>
引入filter-opentracing模块shell
<dependency> <groupId>com.weibo</groupId> <artifactId>filter-opentracing</artifactId> <exclusions> <exclusion> <groupId>io.opentracing</groupId> <artifactId>opentracing-api</artifactId> </exclusion> </exclusions> </dependency>
此处要exclud掉opentracing-api防止filter-opentracing跟brave的依赖冲突
public class BraveTarcerFactory implements TracerFactory { private static Tracer braveTracer = BraveTracer.create(Tracing.newBuilder() // 设置当前服务的服务名,需作成配置化 .localServiceName("goods-service") // 此处采用OkHttpSender经过HTTP请求的方式发送跟踪数据,Zipkin的日志接口地址需作成配置化的 .spanReporter(AsyncReporter.create(OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans"))) .build()); @SuppressWarnings("deprecation") @Override public Tracer getTracer() { return braveTracer; } }
@Bean BraveTarcerFactory tarcerFactory() { return new BraveTarcerFactory(); } @Bean OpenTracingContext openTracingContext(TracerFactory tracerFactory) { OpenTracingContext context = new OpenTracingContext(); context.setTracerFactory(tracerFactory); return context; }
@Bean(name = "motanClientBasicConfig") @ConditionalOnMissingBean public BasicRefererConfigBean baseRefererConfig() { BasicRefererConfigBean config = new BasicRefererConfigBean(); config.setFilter("opentracing"); return config; } @Bean(name = "motanServerBasicConfig") @ConditionalOnMissingBean public ServerBasicConfig() { BasicRefererConfigBean config = new BasicRefererConfigBean(); config.setFilter("opentracing"); return config; }
zipkin默认监听9411端口,经过浏览器访问localhost:9441便可进入他的UI页面,点击Find Traces便可看到跟踪结果:数据库
由于项目没有用SpringCloud,本身折腾Brave的依赖真真蛋痛,想要方便仍是得上SpringCloud全家桶啊!后端