通過遠程采樣策略配置,您可以直接在可觀測鏈路 OpenTelemetry 版控制臺上配置采樣策略,而不需要修改代碼。
背景信息
采樣指從全量采集的所有鏈路數據中,采集部分數據進行分析。采樣決策包括采集數據和不采集數據。采樣有以下類型:
事前采樣:在用戶訪問開始時進行采樣決策,Jaeger的采樣是事前采樣。
事后采樣:在用戶訪問執行過程中或者訪問過程后進行采樣決策。
采樣流程
以一個簡單的調用關系為例:A->B->C(服務A調用服務B,同時,服務B調用服務C),服務A為頭節點。當服務A收到不包含跟蹤信息的請求時,Jaeger跟蹤器將開始新的跟蹤:
Jaeger跟蹤器將為服務A、服務B以及服務C分配同一個隨機Trace ID,并根據當前配置的采樣策略做出采樣決策。
采樣決策將與請求一起傳播到服務B和服務C,這些服務將不做采樣決策,而是接受頭節點服務A的采樣決策。
這種方法保證鏈路上所有Span都被記錄在后端。 如果每個服務都做出自己的采樣決策,那么您將很難在后端獲得完整的調用鏈路。
只有頭節點的采樣策略會生效,例如服務A、B、C中都配置采樣策略:
對于調用鏈路為A->B->C,只有A的采樣策略會生效。
對于調用鏈路為B->C->A,只有B的采樣策略會生效。
配置客戶端
您需要在構建Trace對象時,將采樣類型配置成Remote,采樣的服務地址配置成可觀測鏈路 OpenTelemetry 版的采樣地址。詳情請參見通過Jaeger上報Java應用數據。將控制臺上的接入點信息做簡單修改后,您可以得到采樣地址:
將
api/traces
改成/api/sampling
。去掉
http://
。
例如,將
http://tracing-analysis-dc-hz.aliyuncs.com/adapt_******_******/api/traces
修改為
tracing-analysis-dc-hz.aliyuncs.com/adapt_******_******/api/sampling
代碼示例如下:
io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("your application name");
config.withSampler(new Configuration.SamplerConfiguration().withType("remote")
.withManagerHostPort("tracing-analysis-dc-hz.aliyuncs.com/adapt_ao123458@abcdefg_ao123458@fghijklm/api/sampling")
.withParam(0.1));
如果您在客戶端配置成遠程采樣方式,但是沒有在服務端配置采樣策略,系統將會按照固定比例0.001(0.1%)進行采樣。
配置服務端
您需要先在客戶端完成配置,才能在服務端配置采樣策略。您的配置將對所有配置了遠程采樣方式的Jaeger Client生效。
功能入口
在左側導航欄單擊集群配置,然后在右側頁面單擊采樣上報頁簽。
采樣策略級別
default_strategy
:默認策略,必須配置。它還包括共享的per-operation策略,這些per-operation策略將適用于配置中未列出的、沒有Service級別和Span級別的所有服務。service_strategies
:Service級別的采樣策略,可選。operation_strategies
:Span級別的采樣策略,可選。
采樣策略類型
比例采樣:
default_strategy
、service_strategies
以及operation_strategies
可配置。速率采樣:
default_strategy
以及service_strategies
可配置。
示例如下:
{
"service_strategies": [
{
"service": "foo",
"type": "probabilistic",
"param": 0.8,
"operation_strategies": [
{
"operation": "op1",
"type": "probabilistic",
"param": 0.2
},
{
"operation": "op2",
"type": "probabilistic",
"param": 0.4
}
]
},
{
"service": "bar",
"type": "ratelimiting",
"param": 5
}
],
"default_strategy": {
"type": "probabilistic",
"param": 0.5,
"operation_strategies": [
{
"operation": "/health",
"type": "probabilistic",
"param": 0.0
},
{
"operation": "/metrics",
"type": "probabilistic",
"param": 0.0
}
]
}
}
在示例中:
應用foo的所有操作均以0.8的比例進行采樣,但op1和op2分別以0.2的比例和0.4的比例進行采樣。
應用bar的所有Span埋點均以每秒5條鏈路的速率進行采樣。
其他應用將以default_strategy定義的概率0.5進行采樣。
另外,在此示例中,我們通過使用概率0禁用了對所有服務的/health和/metrics端點的跟蹤。