菜单
开源

用于 Go 的 Span 剖析与 Traces 到 profiles

Span 剖析代表了剖析方法论的重大转变,能够更深入地分析追踪和剖析数据。传统的持续剖析在固定间隔内提供应用范围的视图。相比之下,Span 剖析侧重于应用内特定执行范围(例如单个请求或特定追踪 Span)的动态分析。

这一转变使得对性能有了更细粒度的视图,通过将剖析直接与追踪关联起来,从而增强了剖析的效用,以便全面理解应用行为。因此,工程团队可以更高效地识别和解决性能瓶颈。

要了解更多关于 Span 剖析的信息,请参阅结合追踪和剖析提升可观测性:Span 剖析介绍

span-profiles screenshot

Pyroscope 可以与支持 OpenTelemetry 标准的分布式追踪系统集成。此集成允许您将追踪与剖析数据关联,并查找您的追踪 Span 中特定代码行的资源使用情况。

注意

  • 仅支持 CPU 剖析。
  • 由于采样剖析器的工作方式,短于采样间隔的 Span 可能无法捕获。Go CPU 剖析器每秒探测堆栈追踪 100 次,这意味着短于 10 毫秒的 Span 可能无法捕获。

要使用 Span 剖析,您需要

开始之前

在使用 Span 剖析之前,您的应用必须完成剖析和追踪的插桩。

  • 剖析:您的应用必须使用 Pyroscope 的 Go SDK 完成插桩。如果您尚未完成,请参阅Go(推送模式)指南。
  • 追踪:您的应用必须使用 OpenTelemetry 追踪完成插桩。如果您尚未完成,请参阅OpenTelemetry指南。

配置 otel-profiling-go

要开始收集 Go 应用的 Span 剖析,您需要在代码中包含 otel-profiling-go 包。这个包是一个 TracerProvider 实现,它使用 Span ID 标记剖析数据。这使得可以使用在 Grafana 或 Grafana Cloud 中配置的 Tempo 数据源来查询特定 Span 的剖析数据。

这个包是一个 TracerProvider 实现,它使用 span ID 标记 profiling 数据。这使得使用在 Grafana 或 Grafana Cloud 中配置的 Tempo 数据源来查询针对特定 span 的 profiling 数据成为可能。

shell
# Make sure you also upgrade pyroscope server to version 0.14.0 or higher.
go get github.com/grafana/otel-profiling-go

接下来,您需要创建并配置追踪器提供程序

Go
package main

import (
	otelpyroscope "github.com/grafana/otel-profiling-go"
	"github.com/grafana/pyroscope-go"
)

func main() {
	// Initialize your tracer provider as usual.
	tp := initTracer()

	// Wrap it with otelpyroscope tracer provider.
	otel.SetTracerProvider(otelpyroscope.NewTracerProvider(tp))

	// If you're using Pyroscope Go SDK, initialize pyroscope profiler.
	_, _ = pyroscope.Start(pyroscope.Config{
		ApplicationName: "my-service",
		ServerAddress:   "https://:4040",
	})

	// Your code goes here.
}

设置好追踪器后,您可以从任何地方创建新的追踪,剖析器将自动捕获其剖析数据。

Go
ctx, span := otel.Tracer("tracerName").Start(ctx, "ExampleSpan")
defer span.End()

// Your code goes here.

在 Grafana 或 Grafana Cloud 中查看 Span 剖析

要在 Grafana Tempo 中查看 Span 剖析,您需要一个配置了 Tempo 数据源的 Grafana 实例,以便关联追踪 Span 和剖析数据。请参考 GrafanaGrafana Cloud 的配置文档。

要了解如何设置 Traces 到 profiles 以及如何查看 Span 剖析,请参阅Traces 到 profiles

示例

查看 examples 目录,获取一个展示追踪集成功能的完整示例应用。