采样

了解如何配置发送到 Sentry 的错误和事务事件的数量。

将 Sentry 添加到您的应用程序中,可以为您提供大量关于错误和性能的宝贵信息,这些信息在其他情况下是无法获得的。大量的信息是好的——只要它是正确的信息,并且数量合理。

要将具有代表性的错误样本发送到 Sentry,请在 SDK 配置中将 sampleRate 选项设置为 0(0% 的错误发送)到 1(100% 的错误发送)之间的数字。这是一个静态比率,将平等应用于所有错误。例如,要采样 25% 的错误:

Copied
Sentry.init({ sampleRate: 0.25 });

错误采样率默认为 1,表示所有错误都会发送到 Sentry。

更改错误采样率需要重新部署。此外,设置 SDK 采样率会限制对事件来源的可见性。为项目设置速率限制(仅在事件量高时丢弃事件)可能更适合您的需求。

无论事务的采样决策如何,该决策将传递给其子跨度,然后从那里传递给其他服务中随后引发的任何事务。

(有关传播方式的更多信息,请参阅 分布式跟踪。)

如果当前创建的事务是这些后续事务之一(换句话说,如果有父级事务),上游(父级)采样决策将包含在采样上下文数据中。您的 tracesSampler 可以使用此信息来决定是否继承该决策。在大多数情况下,继承是正确的选择,以避免破坏分布式跟踪。断裂的跟踪将不会包含所有您的服务。

Copied
tracesSampler: samplingContext => {
  // always inherit
  if (samplingContext.parentSampled !== undefined) {
    return samplingContext.parentSampled
  }

  ...
  // rest of sampling logic here
}

如果您使用的是 tracesSampleRate 而不是 tracesSampler,则决策将始终被继承。

事务可以通过多种方式获得采样决策:

  • 根据在 tracesSampleRate 中设置的静态采样率进行随机采样
  • 根据 tracesSampler 返回的采样函数率进行随机采样
  • tracesSampler 返回的绝对决策(100% 或 0% 的机会)
  • 如果事务有父级,则继承其父级的采样决策
  • 传递给 startTransaction 的绝对决策

当有可能多个决策同时生效时,应用以下优先级规则:

  1. 如果采样决策传递给 startTransaction,该决策将被使用,覆盖所有其他决策。
  2. 如果定义了 tracesSampler,其决策将被使用。它可以选择保留或忽略任何父级采样决策,使用采样上下文数据做出自己的决策,或为事务选择采样率。我们建议不要覆盖父级采样决策,因为这会破坏分布式跟踪。
  3. 如果未定义 tracesSampler,但存在父级采样决策,则使用父级采样决策。
  4. 如果未定义 tracesSampler 且没有父级采样决策,则根据 tracesSampleRate 进行随机采样。