ActivitySource.CreateActivity 和 ActivitySource.StartActivity 行为更改

当注册的侦听器决定应创建实例时,ActivitySource.CreateActivityActivitySource.StartActivity API 仅返回 Activity。 这通常称为采样。

System.Diagnostics.ActivitySamplingResult 枚举定义可能的采样决策。

在没有父级的情况下创建 Activity 时,ActivitySamplingResult 确定是否创建 Activity,然后决定如何设置 RecordedIsAllDataRequested 属性:

ActivitySamplingResult 已创建活动 Activity.Recorded Activity.IsAllDataRequested
没有
PropagationData 是的
AllData 是的 正确
AllDataAndRecorded 是的 正确 正确

还可以使用父级创建 Activity。 父进程可能位于同一进程中,也可能是传播到当前进程的远程父进程。

以前的行为

之前,当创建 ActivityPropagationData,父节点标记为 Recorded 时,RecordedIsAllDataRequested 属性设置如下:

ActivitySamplingResult 已创建活动 Activity.Recorded Activity.IsAllDataRequested
PropagationData 是的 正确

新行为

从 .NET 10 开始,创建 ActivityPropagationData,父级标记为 Recorded 时,RecordedIsAllDataRequested 属性将按如下所示设置:

ActivitySamplingResult 已创建活动 Activity.Recorded Activity.IsAllDataRequested
PropagationData 是的

引入的版本

.NET 10 预览版 1

破坏性变更的类型

此更改为行为更改

更改原因

以前的行为未遵循 OpenTelemetry 规范。

如果已直接实现 ActivityListener.Sample AND 使用 ActivitySamplingResult.PropagationData,请验证你是否不依赖于有缺陷的行为。 若要还原以前的行为,可以在 Activity.ActivityTraceFlagsRecorded 调用后将 CreateActivity 设置为 StartActivity

如果使用 OpenTelemetry .NET 并自定义了采样器,请验证采样器配置。 默认的 OpenTelemetry .NET 配置使用不受影响的基于父级的算法。

受影响的 API