diff --git a/cmd/main.go b/cmd/main.go index 3f45558..c3bb6b5 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -27,6 +27,7 @@ func main() { flag.TextVar(&level, "log-level", zapcore.InfoLevel, "logger level") flag.StringVar(&conf.MetricsBindAddress, "metrics-address", "127.0.0.1:8080", "The address the metric endpoint binds to.") flag.BoolVar(&conf.LeaderElection, "enable-leader-election", false, "Enable leader election for controller manager") + flag.BoolVar(&conf.PProf, "enable-pprof", false, "Enable profile debug") flag.Parse() // 初始化日志格式 ctrl.SetLogger(zap.New(func(o *zap.Options) { diff --git a/pkg/k8s/k8s.go b/pkg/k8s/k8s.go index fb7db84..5098ee3 100644 --- a/pkg/k8s/k8s.go +++ b/pkg/k8s/k8s.go @@ -2,6 +2,8 @@ package k8s import ( "fmt" + "net/http" + "net/http/pprof" v1 "monitor/pkg/apis/v1" @@ -16,6 +18,7 @@ import ( type Config struct { ctrl.Options + PProf bool } type Manager struct { @@ -41,6 +44,14 @@ func NewManager(conf Config) (*Manager, error) { return nil, fmt.Errorf("unable to add scheme %w", err) } + if conf.PProf { + mgr.AddMetricsExtraHandler("/debug/pprof/", http.HandlerFunc(pprof.Index)) + mgr.AddMetricsExtraHandler("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline)) + mgr.AddMetricsExtraHandler("/debug/pprof/profile", http.HandlerFunc(pprof.Profile)) + mgr.AddMetricsExtraHandler("/debug/pprof/symbol", http.HandlerFunc(pprof.Symbol)) + mgr.AddMetricsExtraHandler("/debug/pprof/trace", http.HandlerFunc(pprof.Trace)) + } + return &Manager{mgr: mgr}, nil }