mirror of
https://github.com/linka-cloud/grpc.git
synced 2026-01-25 11:05:05 +00:00
feat(pprof): add pyroscope profiler support
Signed-off-by: Adphi <philippe.adrien.nousse@gmail.com>
This commit is contained in:
38
pprof/pprof.go
Normal file
38
pprof/pprof.go
Normal 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")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user