当注册的侦听器决定应创建实例时,ActivitySource.CreateActivity 和 ActivitySource.StartActivity API 仅返回 Activity。 这通常称为采样。
System.Diagnostics.ActivitySamplingResult 枚举定义可能的采样决策。
在没有父级的情况下创建 Activity 时,ActivitySamplingResult 确定是否创建 Activity,然后决定如何设置 Recorded 和 IsAllDataRequested 属性:
| ActivitySamplingResult | 已创建活动 | Activity.Recorded | Activity.IsAllDataRequested | 
|---|---|---|---|
| 没有 | 不 | ||
| PropagationData | 是的 | 假 | 假 | 
| AllData | 是的 | 假 | 正确 | 
| AllDataAndRecorded | 是的 | 正确 | 正确 | 
还可以使用父级创建 Activity。 父进程可能位于同一进程中,也可能是传播到当前进程的远程父进程。
以前的行为
之前,当创建 Activity 为 PropagationData,父节点标记为 Recorded 时,Recorded 和 IsAllDataRequested 属性设置如下:
| ActivitySamplingResult | 已创建活动 | Activity.Recorded | Activity.IsAllDataRequested | 
|---|---|---|---|
| PropagationData | 是的 | 正确 | 假 | 
新行为
从 .NET 10 开始,创建 Activity 为 PropagationData,父级标记为 Recorded 时,Recorded 和 IsAllDataRequested 属性将按如下所示设置:
| ActivitySamplingResult | 已创建活动 | Activity.Recorded | Activity.IsAllDataRequested | 
|---|---|---|---|
| PropagationData | 是的 | 假 | 假 | 
引入的版本
.NET 10 预览版 1
破坏性变更的类型
此更改为行为更改。
更改原因
以前的行为未遵循 OpenTelemetry 规范。
建议的操作
如果已直接实现 ActivityListener.Sample AND 使用 ActivitySamplingResult.PropagationData,请验证你是否不依赖于有缺陷的行为。 若要还原以前的行为,可以在 Activity.ActivityTraceFlags 或 Recorded 调用后将 CreateActivity 设置为 StartActivity。
如果使用 OpenTelemetry .NET 并自定义了采样器,请验证采样器配置。 默认的 OpenTelemetry .NET 配置使用不受影响的基于父级的算法。