feat(pprof): add pyroscope profiler support

Signed-off-by: Adphi <philippe.adrien.nousse@gmail.com>
This commit is contained in:
2026-01-07 12:30:18 +01:00
parent 8e50da9205
commit 126f080612
4 changed files with 173 additions and 0 deletions

38
pprof/pprof.go Normal file
View File

@@ -0,0 +1,38 @@
package pprof
import (
"context"
"runtime"
"github.com/grafana/pyroscope-go"
"go.linka.cloud/grpc-toolkit/logger"
)
func Init(ctx context.Context, app string, opts ...Option) {
if app == "" {
panic("application name is required to start pyroscope profiler")
}
o := defaultOptions
for _, v := range opts {
v(&o)
}
if valueOrEnv(o.address, o.addressEnv) == "" {
return
}
runtime.SetMutexProfileFraction(o.mutexProfileFraction)
runtime.SetBlockProfileRate(o.blockProfileRate)
log := logger.C(ctx).WithFields("service", "pyroscope")
log.Info("starting pyroscope profiler")
_, err := pyroscope.Start(pyroscope.Config{
ApplicationName: app,
ServerAddress: valueOrEnv(o.address, o.addressEnv),
BasicAuthUser: valueOrEnv(o.user, o.userEnv),
BasicAuthPassword: valueOrEnv(o.password, o.passwordEnv),
Logger: log,
ProfileTypes: o.profiles,
})
if err != nil {
log.WithError(err).Error("failed to start pyroscope")
}
}