全部產品
Search
文件中心

Managed Service for OpenTelemetry:使用Jaeger進行遠程採樣策略配置

更新時間:Jul 06, 2024

通過遠程採樣策略配置,您可以直接在Managed Service for OpenTelemetry控制台上配置採樣策略,而不需要修改代碼。

背景資訊

採樣指從全量採集的所有鏈路資料中,採集部分資料進行分析。採樣決策包括採集資料和不採集資料。採樣有以下類型:

  • 事前採樣:在使用者訪問開始時進行採樣決策,Jaeger的採樣是事前採樣。
  • 事後採樣:在使用者訪問執行過程中或者訪問過程後進行採樣決策。

採樣流程

以一個簡單的調用關係為例:A->B->C(服務A調用服務B,同時,服務B調用服務C),服務A為前端節點。當服務A收到不包含跟蹤資訊的請求時,Jaeger跟蹤器將開始新的跟蹤:

  1. Jaeger跟蹤器將為服務A、服務B以及服務C分配同一個隨機Trace ID,並根據當前配置的採樣策略做出採樣決策。
  2. 採樣決策將與請求一起傳播到服務B和服務C,這些服務將不做採樣決策,而是接受前端節點服務A的採樣決策。

這種方法保證鏈路上所有Span都被記錄在後端。 如果每個服務都做出自己的採樣決策,那麼您將很難在後端獲得完整的調用鏈路。

說明 只有前端節點的採樣策略會生效,例如服務A、B、C中都配置採樣策略:
  • 對於調用鏈路為A->B->C,只有A的採樣策略會生效。
  • 對於調用鏈路為B->C->A,只有B的採樣策略會生效。

配置用戶端

您需要在構建Trace對象時,將採樣類型配置成Remote,採樣的服務地址配置成Managed Service for 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生效。

功能入口

  1. 登入可觀測鏈路 OpenTelemetry 版控制台

  2. 在左側導覽列單擊叢集配置,然後在右側頁面單擊採樣上報頁簽。
採樣策略層級
  • default_strategy:預設策略,必須配置。它還包括共用的per-operation策略,這些per-operation策略將適用於配置中未列出的,沒有Service層級和Span層級的任何所有服務。
  • service_strategies:Service層級的採樣策略,可選。
  • operation_strategies:Span層級的採樣策略,可選。
採樣策略類型
  • 比例採樣:default_strategyservice_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端點的跟蹤。