zipkin+elasticsearch全链路跟踪(springcloud)

公司最近搭建springcloud架构,我在做sleuth+zipkin做链路跟踪时发现zipkin将trace存在内存中,而一旦访问量上去,zipkin就容易被压崩,网上搜索资料发现基本都是kafka+zk+elasticsearch做解决方案的

这种方案在各种springcloud书上和各种文章上有很多说明,再次不多做叙述,而我没有采用这个方案,第一是觉得无端侵入kafka或者其他消息队列和zk,略有些重,以kafka为例,吞吐量基本是每秒百万级数的,而做链路跟踪时本身就是异步写入的,所以觉得再应用消息队列意义不大(当然了,使用消息队列可以解耦)第二是想应用eureka的注册发现机制,在链路调用时用Thrift写tracer传入zipkin,可以做集群部署提高可用性。综合考虑下决定使用zipkin,内存使用elasticsearch做存储,不使用过多使用中间件,配置和代码如下:

server端

pom.xml

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>io.zipkin.java</groupId>
			<artifactId>zipkin</artifactId>
			<version>1.28.1</version>
		</dependency>

		<dependency>
			<groupId>io.zipkin.java</groupId>
			<artifactId>zipkin-server</artifactId>
			<version>1.28.1</version>
		</dependency>

		<dependency>
			<groupId>io.zipkin.java</groupId>
			<artifactId>zipkin-autoconfigure-ui</artifactId>
			<version>1.28.1</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-sleuth</artifactId>
		</dependency>

		<dependency>
			<groupId>io.zipkin.java</groupId>
			<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
			<version>1.23.0</version>
			<optional>true</optional>
		</dependency>

	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

application.properties

server.port=63500
spring.sleuth.enabled=false
#采样率,推荐0.1,百分之百收集的话存储可能扛不住
spring.sleuth.sampler.percentage=1

zipkin.storage.StorageComponent=elasticsearch
zipkin.storage.type=elasticsearch
#可以做集群,我用的本地测试没有部署elastic集群
zipkin.storage.elasticsearch.hosts=127.0.0.1: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

ZipkinApplication.java

@SpringBootApplication
@EnableZipkinServer
@EnableAutoConfiguration
public class ZipkinApplication {

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

client端

pom文件:加入

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-sleuth-zipkin</artifactId>
		</dependency>
 application.properties:加入
spring.zipkin.base-url=http://127.0.0.1:63500

spring.sleuth.sampler.percentage=1.0

补充:链路跟踪基本就差不多了,另外需要配合日志收集可以考虑配合ELK等做日志收集分析,需要用EUREKA做服务治理也可以补上服务发现等。(有问题意见欢迎补充)

猜你喜欢

转载自blog.csdn.net/houkun_dobest/article/details/78483922
今日推荐