菜单
开源

.NET 的 Span Profile 与 Traces to Profiles

Span Profile 代表着性能剖析方法论的转变。传统的持续性能剖析在固定间隔内提供应用范围的视图。相比之下,Span Profile 提供了对应用程序内特定执行范围(例如单个请求或特定的跟踪 span)的聚焦式动态分析。

要了解更多关于 Span Profile 的信息,请参阅结合跟踪和性能剖析增强可观测性:Span Profile 简介

span-profiles screenshot

支持的 Profile 类型

Pyroscope 集成了支持 OpenTelemetry 标准的分布式跟踪系统。这种集成使您能够将跟踪数据与性能剖析数据关联起来,并查找跟踪 Span 中特定代码行的资源使用情况。

注意

  • 目前仅支持 CPU 性能剖析。
  • 由于采样式性能剖析器的工作方式,短于采样间隔的 span 可能无法被捕获。

有关支持的 Profile 类型的更详细列表,请参阅Profile 类型

开始之前

要使用 Span 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 数据)关联起来。

shell
dotnet add package Pyroscope.OpenTelemetry

接下来,创建并注册 PyroscopeSpanProcessor

csharp
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 演示应用程序