暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Zipkin 持久化存入Elasticsearch

Java有货 2020-01-16
696

一.Zipkin服务端

1.1 依赖

 <properties>
<java.version>1.8</java.version>
<zipkin.version>2.9.4</zipkin.version>
<zipkin.es.version>2.8.4</zipkin.es.version>
</properties>

<dependencies>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>${zipkin.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<scope>runtime</scope>
<version>${zipkin.version}</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
<version>${zipkin.es.version}</version>
<optional>true</optional>
</dependency>
</dependencies>

复制

1.2. 配置文件

zipkin.storage.StorageComponent=elasticsearch
zipkin.storage.type=elasticsearch
#可以做集群,我用的本地测试没有部署elastic集群
zipkin.storage.elasticsearch.hosts=192.168.42.40:9200
zipkin.storage.elasticsearch.cluster=elasticsearch
zipkin.storage.elasticsearch.index=zipkin
zipkin.storage.elasticsearch.index-shards=5
zipkin.storage.elasticsearch.index-replicas=1
maxHttpHeaderSize=8192
action.auto_create_index=true

复制

1.3. 启动类

@EnableZipkinServer//开启ZipkinServe
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ZipkinApplication {

public static void main(String[] args) {
SpringApplication.run(ZipkinApplication.class, args);
}
}

复制

二、客户端配置

2.1 SpringBoot 版本

2.1.1 依赖

<!-- zipkin-->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-core</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-spancollector-http</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-web-servlet-filter</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-okhttp</artifactId>
<version>3.10.0</version>
</dependency>
<!-- zipkin-->

复制

2.1.2 全局配置

@Data
@Configuration
@ConfigurationProperties(prefix = ZipkinConfig.ZIPKIN_PREFIX)
public class ZipkinConfig {

public static final String ZIPKIN_PREFIX = "zipkin";

//服务名称
private String serviceName;

//地址
private String url;

//连接时间
private int connectTimeout;

//读取时间
private int readTimeout;

//每间隔多少秒执行一次Span信息上传
private int flushInterval;

//是否启动压缩
private boolean compressionEnabled;

/**
* @Description span(一次请求信息或者一次链路调用)信息收集器
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param
* @return com.github.kristofa.brave.SpanCollector
*/
@Bean
public SpanCollector spanCollector() {
Config config = Config.builder()
// 默认false,span在transport之前是否会被gzipped
.compressionEnabled(compressionEnabled)
.connectTimeout(connectTimeout)
.flushInterval(flushInterval)
.readTimeout(readTimeout)
.build();
return create(url, config, new EmptySpanCollectorMetricsHandler());
}

/**
* @Description 作为各调用链路,只需要负责将指定格式的数据发送给zipkin
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param spanCollector
* @return com.github.kristofa.brave.Brave
*/
@Bean
public Brave brave(SpanCollector spanCollector) {
//调用服务的名称
Builder builder = new Builder(serviceName);
builder.spanCollector(spanCollector);
//采集率
builder.traceSampler(Sampler.ALWAYS_SAMPLE);
return builder.build();
}

/**
* @Description 设置server的(服务端收到请求和服务端完成处理,并将结果发送给客户端)过滤器
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param brave
* @return com.github.kristofa.brave.servlet.BraveServletFilter
*/
@Bean
public BraveServletFilter braveServletFilter(Brave brave) {
BraveServletFilter filter = new BraveServletFilter(brave.serverRequestInterceptor(),
brave.serverResponseInterceptor(), new DefaultSpanNameProvider());
return filter;
}

/**
* @Description 设置client的(发起请求和获取到服务端返回信息)拦截器
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param brave
* @return okhttp3.OkHttpClient
*/
@Bean
public OkHttpClient okHttpClient(Brave brave) {
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new BraveOkHttpRequestResponseInterceptor(
brave.clientRequestInterceptor(),
brave.clientResponseInterceptor(),
new DefaultSpanNameProvider())).build();
return httpClient;
}
}


复制

2.1.3 配置文件

zipkin.serviceName=exam-app
zipkin.url=http://localhost:8096
zipkin.connectTimeout=6000
zipkin.readTimeout=6000
zipkin.flushInterval=1
zipkin.compressionEnabled=true
management.endpoints.web.exposure.include="*"

复制

2.2 SpringCloud 版本

2.2.1 依赖

 <!--引入的zipkin依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

复制

2.2.2 配置文件

  zipkin:
base-url: http://localhost:8096
# 关闭服务发现,否则Spring Cloud会把zipkin的url当做服务名称
discoveryClientEnabled: false
sender:
type: web
sleuth:
sampler:
probability: 1 # 设置抽样采集率为100%,默认为0.1,即10%

复制

三. 验证

3.1 zipkin UI验证

访问消费者之后,在zipkin里会显示

这时我们关掉服务,再重启,数据还在,说明持久化成功!

3.2 kibana验证

创建索引

查看

3.3 ES-Head验证

往期好文

1.JVM 调优实战

2.Spring Aop实战案例二

3.程序员都在读的书,你也不能错过哦!



小编寄语

小编创建了一个关于Java学习讨论的微信群!想进去的可以联系小编!同时也欢迎大家点赞与转发!

小编微信:372787553

备注为进群,通过后小编会邀请您进群!



Ja


va













文章转载自Java有货,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论