API Server: Enhanced profiling with godeltaprof (#88939)

pull/88941/head
Marcus Efraimsson 1 year ago committed by GitHub
parent 63e9969c1b
commit 4a97ff45fe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 34
      devenv/docker/blocks/self-instrumentation/agent.flow
  2. 16
      pkg/cmd/grafana/apiserver/server.go

@ -50,4 +50,38 @@ pyroscope.scrape "default" {
{"__address__" = "host.docker.internal:6060", "service_name"="grafana"}, {"__address__" = "host.docker.internal:6060", "service_name"="grafana"},
] ]
forward_to = [pyroscope.write.default.receiver] forward_to = [pyroscope.write.default.receiver]
profiling_config {
profile.process_cpu {
enabled = true
}
profile.godeltaprof_memory {
enabled = true
}
profile.memory { // disable memory, use godeltaprof_memory instead
enabled = false
}
profile.godeltaprof_mutex {
enabled = true
}
profile.mutex { // disable mutex, use godeltaprof_mutex instead
enabled = false
}
profile.godeltaprof_block {
enabled = true
}
profile.block { // disable block, use godeltaprof_block instead
enabled = false
}
profile.goroutine {
enabled = true
}
}
} }

@ -7,10 +7,12 @@ import (
"net" "net"
"path" "path"
"github.com/grafana/pyroscope-go/godeltaprof/http/pprof"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
utilerrors "k8s.io/apimachinery/pkg/util/errors" utilerrors "k8s.io/apimachinery/pkg/util/errors"
genericapiserver "k8s.io/apiserver/pkg/server" genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/mux"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
netutils "k8s.io/utils/net" netutils "k8s.io/utils/net"
@ -178,5 +180,19 @@ func (o *APIServerOptions) RunAPIServer(config *genericapiserver.RecommendedConf
} }
} }
if config.EnableProfiling {
deltaProfiling{}.Install(server.Handler.NonGoRestfulMux)
}
return server.PrepareRun().Run(stopCh) return server.PrepareRun().Run(stopCh)
} }
// deltaProfiling adds godeltapprof handlers for pprof under /debug/pprof.
type deltaProfiling struct{}
// Install register godeltapprof handlers to the given mux.
func (d deltaProfiling) Install(c *mux.PathRecorderMux) {
c.UnlistedHandleFunc("/debug/pprof/delta_heap", pprof.Heap)
c.UnlistedHandleFunc("/debug/pprof/delta_block", pprof.Block)
c.UnlistedHandleFunc("/debug/pprof/delta_mutex", pprof.Mutex)
}

Loading…
Cancel
Save