CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Jaeger/采样
文档目录
API采样服务性能监控 (SPM)术语

Jaeger

采样

在处理大量追踪数据时,采样是必不可少的。采样有助于控制生成追踪数据的应用程序的开销,以及追踪数据的存储和处理成本。理想情况下,采样的目标是丢弃不太重要的数据,保留诊断问题所需的数据。 Jaeger 支持多种类型的采样策略。 头部采样是指在追踪开始时就做出采样决策。OpenTelemetry SDK 内置了对头部采样的支持。该主题在 OpenTelemetry 头部采样文档中有详细介绍。...

在处理大量追踪数据时,采样是必不可少的。采样有助于控制生成追踪数据的应用程序的开销,以及追踪数据的存储和处理成本。理想情况下,采样的目标是丢弃不太重要的数据,保留诊断问题所需的数据。

Jaeger 支持多种类型的采样策略。

头部采样

头部采样是指在追踪开始时就做出采样决策。OpenTelemetry SDK 内置了对头部采样的支持。该主题在 OpenTelemetry 头部采样文档中有详细介绍。

尾部采样

尾部采样允许在追踪完成并收集所有 span 之后再做出采样决策。这提供了对保留哪些追踪数据和丢弃哪些追踪数据的更细粒度控制。其缺点是:(a) 应用程序必须记录和导出所有追踪数据,带来运行时开销;(b) Jaeger 后端需要更高的内存和处理成本。您可以在 OpenTelemetry 文档中了解更多关于尾部采样的信息。

Jaeger 通过 tail sampling processor 支持尾部采样。

  • 此配置允许对 Jaeger 观察到的所有数据进行采样,并通过 debug 日志来诊断问题。
  • 第二个配置按特定服务名称进行采样。

远程采样

远程采样是头部采样的一种形式,其中采样策略的配置由 SDK 从 Jaeger 后端获取。它允许将采样策略集中在一个位置,简化了在大规模生产系统中运行的 SDK 的管理。

Jaeger 的 remote_sampling extension 支持 Jaeger 的远程采样协议,该协议为每个服务和端点定义了不同的采样率作为采样策略。策略可以通过两种不同的方式由 Jaeger 生成:定期从文件加载或基于流量动态计算。

以下是远程采样使用的两种基本头部采样器类型:

  • 概率采样器 以预配置的概率做出随机采样决策。例如,当 probability=0.1 时,大约每 10 条追踪中有 1 条会被采样。
  • 速率限制采样器 使用漏桶速率限制器来确保以某个恒定速率进行追踪采样。例如,当 rate=2.0 时,将以每秒 2 条追踪的速率进行采样。

基于文件的采样配置

Jaeger 中的 remote_sampling extension 可以配置一个指向文件的路径,该文件描述了应如何为不同服务生成采样策略。如果文件内容发生变化,将自动重新加载。

remote_sampling:
  file:
    path: ./cmd/jaeger/sampling-strategies.json

如果未提供配置,Jaeger 将为所有服务返回默认的概率采样策略,概率为 0.001(0.1%)。

示例 strategies.json:

{
  "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
      }
    ]
  }
}

service_strategies 元素定义特定于服务的采样策略,operation_strategies 定义特定于操作的采样策略。有两种可能的策略类型:probabilistic 和 ratelimiting,如上所述(注意:operation_strategies 不支持 ratelimiting)。default_strategy 定义了当服务未包含在 service_strategies 中时所传播的兜底采样策略。

在上面的示例中:

  • 服务 foo 的所有操作以 0.8 的概率进行采样,但操作 op1 和 op2 分别以 0.2 和 0.4 的概率进行概率采样。
  • 服务 bar 的所有操作以每秒 5 条追踪的速率进行限速采样。
  • 任何其他服务将以 default_strategy 定义的 0.5 概率进行采样。
  • default_strategy 还包括共享的按操作策略。在此示例中,我们通过使用概率 0 来禁用所有服务的 /health 和 /metrics 端点的追踪。这些按操作策略将应用于配置中未列出的任何新服务,以及 foo 和 bar 服务(除非它们为这两个操作定义了自己的策略)。

自适应采样

配置 remote_sampling extension 的另一种方式是使用自适应采样。其工作原理是观察接收到的 span,并重新计算每个服务/端点组合的采样概率,以确保收集的追踪数据量与 target_samples_per_second 匹配。当检测到新的服务或端点时,会使用 initial_sampling_probability 进行采样,直到收集到足够的数据来计算适合该端点流量的采样率。

自适应采样需要 sampling_store 存储后端来存储观察到的流量数据和计算出的概率。目前支持 memory(用于 all-in-one 部署)、cassandra、badger、elasticsearch 和 opensearch 作为采样存储后端。此示例配置展示了自适应采样的使用方法。

阅读这篇博客文章了解自适应采样引擎的更多详情。

文章大纲