zipkin+elasticsearch全鏈路跟蹤(springcloud)
阿新 • • 發佈:2018-12-30
公司最近搭建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做服務治理也可以補上服務發現等。(有問題意見歡迎補充)