1、什么是调用链?

 一个业务功能可能需要多个服务协作才能实现,一个请求到达服务A,服务A需要依赖服务B, 服务B又依赖服务C、D等进而形成的一个调用链系统、 即调用链

2、为什么要监控调用链?

 调用链错综复杂,需要清晰的链路图反应服务之间的依赖、调用关系

 出现问题后 很难定位,需要对整个调用链路有个完整的监控

 整体系统性能以及运行情况,需要明确的提现,才能根据实际情况调整资源

 

zipkin:Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单

 

追溯数据模型图:

  

 

各业务系统在彼此调用时,将特定的跟踪消息传递至zipkin,zipkin在收集到跟踪信息后将其聚合处理、存储、展示等,用户可通过web UI方便获得网络延迟、调用链路、系统依赖等等

 

zipkin主要涉及四个组件 (collector、storage、search、webUI)
Collector:接收各service传输的数据
storage:列如mysql等,默认存储在内存中
Query:负责查询Storage中存储的数据,提供简单的JSON API获取数据,主要提供给使用Web
webUI: 提供简单的web界面

 

 

linux 安装zipkin.

 

1、wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'
2、其为一个spring boot 工程,直接运行jar nohup java -jar zipkin.jar &
3、访问 http://ip:9411

 

springBoot项目

1、添加依赖 pom.xml:


<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-core</artifactId>
<version>3.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.zipkin.brave/brave-http -->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-http</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-spancollector-http</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-web-servlet-filter</artifactId>
<version>3.9.0</version>
</dependency>

<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-okhttp</artifactId>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-mysql</artifactId>
<version>3.9.0</version>
</dependency>

2、application.properties配置

com.zipkin.serviceName=declareserv
com.zipkin.url=http://192.168.1.61:9411
com.zipkin.connectTimeout=6000
com.zipkin.readTimeout=6000
com.zipkin.flushInterval=1
com.zipkin.compressionEnabled=true

server.port=8080

3、新建ZipkinProperties类

 

@Configuration
@ConfigurationProperties(prefix = "com.zipkin")
public class ZipkinProperties {

private String serviceName;

private String url;

private int connectTimeout;

private int readTimeout;

private int flushInterval;

private boolean compressionEnabled;
}
get、set省略

4、新建ZipkinConfig类

 

@Configuration
public class ZipkinConfig {

@Autowired
private ZipkinProperties properties;

@Bean
public SpanCollector spanCollector() {
HttpSpanCollector.Config config = HttpSpanCollector.Config.builder().connectTimeout(properties.getConnectTimeout()).readTimeout(properties.getReadTimeout())
.compressionEnabled(properties.isCompressionEnabled()).flushInterval(properties.getFlushInterval()).build();
return HttpSpanCollector.create(properties.getUrl(), config, new EmptySpanCollectorMetricsHandler());
}


@Bean
public Brave brave(SpanCollector spanCollector){
Brave.Builder builder = new Brave.Builder(properties.getServiceName()); //指定state
builder.spanCollector(spanCollector);
builder.traceSampler(Sampler.ALWAYS_SAMPLE);
Brave brave = builder.build();
return brave;
}

@Bean
public BraveServletFilter braveServletFilter(Brave brave){
BraveServletFilter filter = new BraveServletFilter(brave.serverRequestInterceptor(),brave.serverResponseInterceptor(),new DefaultSpanNameProvider());
return filter;
}

@Bean
public OkHttpClient okHttpClient(Brave brave){
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new BraveOkHttpRequestResponseInterceptor(brave.clientRequestInterceptor(), brave.clientResponseInterceptor(), new DefaultSpanNameProvider()))
.build();
return client;
}

@Bean
public MySQLStatementInterceptorManagementBean mySQLStatementInterceptorManagementBean(Brave brave) {
return new MySQLStatementInterceptorManagementBean(brave.clientTracer());
}

}

 

5、访问 http://ip:9411,访问被监控的任意服务,就能在zipkin监控端看到请求的信息了

 


第一次写 博客、有误的地方请各位大神指出、希望能在监控页面显示具体调用的sql  具体怎么实现还不可知   望大神们指教指教!  小生在此先谢过!


posted on 2018-12-19 15:26  辣条董事长  阅读(215)  评论(0)    收藏  举报