原文地址:http://blog.didispace.com/spring-cloud-starter-dalston-8-6/
通過Trace ID
和Span ID
已經(jīng)實現(xiàn)了對分布式系統(tǒng)中的請求跟蹤,而這些記錄的跟蹤信息最終會被分析系統(tǒng)收集起來啥酱,并用來實現(xiàn)對分布式系統(tǒng)的監(jiān)控和分析功能耘分,比如:預(yù)警延遲過長的請求鏈路添寺、查詢請求鏈路的調(diào)用明細(xì)等侧戴。此時荣回,我們在對接分析系統(tǒng)時就會碰到一個問題:分析系統(tǒng)在收集跟蹤信息的時候吸奴,需要收集多少量的跟蹤信息才合適呢隐绵?
理論上來說,我們收集的跟蹤信息越多就可以更好的反映出系統(tǒng)的實際運(yùn)行情況盲链,并給出更精準(zhǔn)的預(yù)警和分析蝇率,但是在高并發(fā)的分布式系統(tǒng)運(yùn)行時,大量的請求調(diào)用會產(chǎn)生海量的跟蹤日志信息刽沾,如果我們收集過多的跟蹤信息將會對我們整個分布式系統(tǒng)的性能造成一定的影響本慕,同時保存大量的日志信息也需要不少的存儲開銷。所以侧漓,在Sleuth中采用了抽象收集的方式來為跟蹤信息打上收集標(biāo)記锅尘,也就是我們之前在日志信息中看到的第四個boolean類型的值,它代表了該信息是否要被后續(xù)的跟蹤信息收集器獲取和存儲布蔗。
在Sleuth中的抽樣收集策略是通過Sampler
接口實現(xiàn)的藤违,它的定義如下:
public interface Sampler {
/**
* @return true if the span is not null and should be exported to the tracing system
*/
boolean isSampled(Span span);
}
通過實現(xiàn)isSampled
方法,Spring Cloud Sleuth會在產(chǎn)生跟蹤信息的時候調(diào)用它來為跟蹤信息生成是否要被收集的標(biāo)志纵揍。需要注意的是纺弊,即使isSampled
返回了false
,它僅代表該跟蹤信息不被輸出到后續(xù)對接的遠(yuǎn)程分析系統(tǒng)(比如:Zipkin)骡男,對于請求的跟蹤活動依然會進(jìn)行,所以我們在日志中還是能看到收集標(biāo)識為false
的記錄傍睹。
默認(rèn)情況下隔盛,Sleuth會使用PercentageBasedSampler
實現(xiàn)的抽樣策略犹菱,以請求百分比的方式配置和收集跟蹤信息,我們可以通過在application.properties
中配置下面的參數(shù)對其百分比值進(jìn)行設(shè)置吮炕,它的默認(rèn)值為0.1
腊脱,代表收集10%的請求跟蹤信息。
spring.sleuth.sampler.percentage=0.1
在開發(fā)調(diào)試期間龙亲,通常會收集全部跟蹤信息輸出到遠(yuǎn)程倉庫陕凹,我們可以將其值設(shè)置為1
,或者也可以通過創(chuàng)建AlwaysSampler
的Bean(它實現(xiàn)的isSampled
方法始終返回true
)來覆蓋默認(rèn)的PercentageBasedSampler
策略鳄炉,比如:
@Bean
public AlwaysSampler defaultSampler() {
return new AlwaysSampler();
}
在實際使用時杜耙,通過與Span對象中存儲信息的配合,我們可以根據(jù)實際情況做出更貼近需求的抽樣策略拂盯,比如實現(xiàn)一個僅對包含指定Tag的抽樣策略:
public class TagSampler implements Sampler {
private String tag;
public TagSampler(String tag) {
this.tag = tag;
}
@Override
public boolean isSampled(Span span) {
return span.tags().get(tag) != null;
}
}
由于跟蹤日志信息的數(shù)據(jù)價值往往僅在最近的一段時間內(nèi)非常有用佑女,比如:一周。那么我們在設(shè)計抽樣策略時谈竿,主要考慮在不對系統(tǒng)造成明顯性能影響的情況下团驱,以在日志保留時間窗內(nèi)充分利用存儲空間的原則來實現(xiàn)抽樣策略。
完整示例:
讀者可以根據(jù)喜好選擇下面的兩個倉庫中查看trace-1
和trace-2
兩個項目:
- Github:https://github.com/dyc87112/SpringCloud-Learning/
- Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您對這些感興趣空凸,歡迎star嚎花、follow、收藏呀洲、轉(zhuǎn)發(fā)給予支持紊选!
本文內(nèi)容部分節(jié)選自我的《Spring Cloud微服務(wù)實戰(zhàn)》,但對依賴的Spring Boot和Spring Cloud版本做了升級两嘴。