21.4. Sampling
sampler 决定 trace 是否应该被丢弃或转发,通过限制发送到收集器的追踪数量来降低开销。它有助于管理资源消耗,从而可以避免跟踪每个请求和潜在性能损失的大量存储成本。
对于生产环境环境,应正确设置抽样功能,以最大程度降低基础架构成本。
Red Hat build of Keycloak 支持几个内置 OpenTelemetry 示例程序,例如:
- always_on
- always_off
- traceidratio (默认)
- parentbased_always_on
- parentbased_always_off
- parentbased_traceidratio
已使用的 sampler 可以通过 tracing-sampler-type
属性来更改。
21.4.1. 默认 sampler
红帽构建的 Keycloak 的默认 sampler 是 traceidratio
,它根据通过 tracing-sampler-ratio
属性可配置的指定比例控制 trace 抽样率。
21.4.1.1. 跟踪比率
默认追踪比率为 1.0
,这意味着所有 trace 都抽样 - 发送到收集器。比率是范围 (0,1]
)中的浮动号。例如,当比率为 0.1
时,只有 10% 的 trace 会抽样。
对于生产环境就绪环境,追踪率应该是较小的数字,以防止大量追踪存储基础架构并避免性能开销。
21.4.1.2. rationale
sampler 根据抽样范围的当前比例做出自己的抽样决策,而不管父范围上做出的决定,正如使用 parentbased_traceidratio
sampler 一样。
parentbased_traceidratio
抽样器可以是首选的默认类型,因为它可确保 parent 和 child 范围之间的抽样一致性。具体来说,如果对父范围进行抽样,则其所有子范围也会被抽样。它有助于将所有 span 保留为一起,并防止存储不完整的 trace。
但是,它可能会引入某些安全风险,从而导致 DoS 攻击。外部调用者可以操作 trace 标头,父范围可以注入,追踪存储可能会超负。需要评估正确的 HTTP 标头(特别是 tracestate
)过滤和适当的调用者信任措施。
如需更多信息,请参阅 W3C Trace 上下文 文档。