capypad
0 Tage Serie
go / expert
Snippet

Profiling spezifischer Logik mit pprof-Labels

Standard-CPU-Profiling in Go zeigt, wo Zeit in Funktionen verbracht wird, unterscheidet aber oft nicht zwischen verschiedenen Kontexten (z. B. welcher Benutzer die Last verursacht hat). pprof.Do ermöglicht es, Key-Value-Labels an den Kontext einer Goroutine zu binden. Bei einem CPU-Profil werden diese Labels aufgezeichnet, sodass das Profil nach spezifischen Kategorien gefiltert werden kann.

snippet.go
go
1
2
3
4
5
6
func processUserRequest(ctx context.Context, userID string) {
labels := pprof.Labels("worker", "image-processor", "user_id", userID)
pprof.Do(ctx, labels, func(ctx context.Context) {
expensiveTransformation(ctx)
})
}
Erklärung
1
pprof.Labels("worker", "image-processor", "user_id", userID)
Definiert benutzerdefinierte Attribute, die der aktuellen Ausführung zugeordnet werden.
2
pprof.Do(ctx, labels, func(ctx context.Context)
Umschließt die Funktionsausführung mit den angegebenen Profiling-Metadaten.