.NET 的 Span Profile 与 Traces to Profiles
Span Profile 代表着性能剖析方法论的转变。传统的持续性能剖析在固定间隔内提供应用范围的视图。相比之下,Span Profile 提供了对应用程序内特定执行范围(例如单个请求或特定的跟踪 span)的聚焦式动态分析。
要了解更多关于 Span Profile 的信息,请参阅结合跟踪和性能剖析增强可观测性:Span Profile 简介。
支持的 Profile 类型
Pyroscope 集成了支持 OpenTelemetry 标准的分布式跟踪系统。这种集成使您能够将跟踪数据与性能剖析数据关联起来,并查找跟踪 Span 中特定代码行的资源使用情况。
注意
- 目前仅支持 CPU 性能剖析。
- 由于采样式性能剖析器的工作方式,短于采样间隔的 span 可能无法被捕获。
有关支持的 Profile 类型的更详细列表,请参阅Profile 类型。
开始之前
要使用 Span Profile,您需要
- 配置 Pyroscope 发送性能剖析数据
- 配置客户端包以关联跟踪和 Profile 数据:.NET
- 在 Grafana 或 Grafana Cloud 中配置 Tempo 数据源以发现关联的跟踪和 Profile 数据
为应用程序进行 Profile 插桩
在使用 Span Profile 之前,您的应用程序必须已进行性能剖析和跟踪插桩。
- 性能剖析:您的应用程序必须使用 Pyroscope 的 .NET 插桩库进行插桩。有关说明,请参阅 .NET 指南。
- 跟踪:您的应用程序必须使用 OpenTelemetry 跟踪进行插桩。有关说明,请参阅 OpenTelemetry 指南。
注意
.NET 中的 Span Profile 仅支持使用 OpenTelemetry 手动插桩,因为 Pyroscope 的 .NET 性能剖析器和 OpenTelemetry 的自动插桩是基于不同的 .NET CLR 性能剖析器实现的。
配置 Pyroscope.OpenTelemetry
包
要开始收集 .NET 应用程序的 Span Profile,您需要在代码中包含 Pyroscope.OpenTelemetry。
此包提供了 SpanProcessor
实现,可以将两种遥测信号(跟踪和 Profile 数据)关联起来。
dotnet add package Pyroscope.OpenTelemetry
接下来,创建并注册 PyroscopeSpanProcessor
builder.Services.AddOpenTelemetry()
.WithTracing(b =>
{
b
.AddAspNetCoreInstrumentation()
.AddConsoleExporter()
.AddOtlpExporter()
.AddProcessor(new Pyroscope.OpenTelemetry.PyroscopeSpanProcessor());
});
注册 Span Processor 后,自动创建的 span(例如 HTTP handler)和手动创建的 span(ActivitySource.StartActivity()
)都会关联性能剖析数据。
在 Grafana 中查看 Span Profile
要在 Grafana Explore 或 Grafana Traces Drilldown 中查看 Span Profile,您需要运行 Grafana 实例并配置 Tempo 数据源以关联跟踪和 Profile 数据。
请参阅 Tempo 数据源配置文档,了解如何配置可视化以关联跟踪和 Profile 数据。
示例
查看这些 Span Profile 演示应用程序