mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
adding pprof
This commit is contained in:
@@ -175,3 +175,5 @@ go tool pprof heap
|
||||
* `KS_FORMAT`: Output file format. default is json
|
||||
* `KS_ENABLE_HOST_SCANNER`: Enable the host scanner feature
|
||||
* `KS_DOWNLOAD_ARTIFACTS`: Download the artifacts every scan
|
||||
* `KS_LOGGER_NAME`: Set logger name
|
||||
* `KS_LOGGER_LEVEL`: Set logger level
|
||||
|
||||
@@ -3,7 +3,7 @@ package v1
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"runtime/pprof"
|
||||
_ "net/http/pprof"
|
||||
|
||||
utilsapisv1 "github.com/armosec/opa-utils/httpserver/apis/v1"
|
||||
utilsmetav1 "github.com/armosec/opa-utils/httpserver/meta/v1"
|
||||
@@ -220,13 +220,6 @@ func (handler *HTTPHandler) Ready(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
// return process heap information
|
||||
func (handler *HTTPHandler) Heap(w http.ResponseWriter, r *http.Request) {
|
||||
defer recover()
|
||||
w.WriteHeader(http.StatusOK)
|
||||
pprof.WriteHeapProfile(w)
|
||||
}
|
||||
|
||||
func (handler *HTTPHandler) recover(w http.ResponseWriter, scanID string) {
|
||||
response := utilsmetav1.Response{}
|
||||
if err := recover(); err != nil {
|
||||
|
||||
@@ -5,16 +5,39 @@ import (
|
||||
|
||||
"github.com/armosec/kubescape/v2/core/cautils/getter"
|
||||
logger "github.com/dwertent/go-logger"
|
||||
"github.com/dwertent/go-logger/helpers"
|
||||
"github.com/dwertent/go-logger/zaplogger"
|
||||
)
|
||||
|
||||
func initialize() error {
|
||||
logger.InitLogger(zaplogger.LoggerName)
|
||||
|
||||
initializeLoggerName()
|
||||
initializeLoggerLevel()
|
||||
initializeSaaSEnv()
|
||||
return nil
|
||||
}
|
||||
|
||||
// initialize logger name
|
||||
func initializeLoggerName() {
|
||||
loggerName := zaplogger.LoggerName
|
||||
if l := os.Getenv("KS_LOGGER_NAME"); l != "" {
|
||||
loggerName = l
|
||||
}
|
||||
logger.InitLogger(loggerName)
|
||||
}
|
||||
|
||||
// initialize logger level
|
||||
func initializeLoggerLevel() {
|
||||
loggerLevel := helpers.DebugLevel.String()
|
||||
if l := os.Getenv("KS_LOGGER_LEVEL"); l != "" {
|
||||
loggerLevel = l
|
||||
}
|
||||
if err := logger.L().SetLevel(loggerLevel); err != nil {
|
||||
logger.L().SetLevel(helpers.DebugLevel.String())
|
||||
logger.L().Error("failed to set logger level", helpers.String("level", loggerLevel), helpers.Error(err), helpers.String("default", helpers.DebugLevel.String()))
|
||||
}
|
||||
}
|
||||
|
||||
// SetupHTTPListener set up listening http servers
|
||||
func initializeSaaSEnv() {
|
||||
|
||||
saasEnv := os.Getenv("KS_SAAS_ENV")
|
||||
|
||||
@@ -21,7 +21,6 @@ const (
|
||||
prometheusMmeticsPath = "/v1/metrics"
|
||||
livePath = "/livez"
|
||||
readyPath = "/readyz"
|
||||
heap = "/heap"
|
||||
)
|
||||
|
||||
// SetupHTTPListener set up listening http servers
|
||||
@@ -51,12 +50,13 @@ func SetupHTTPListener() error {
|
||||
rtr.HandleFunc(resultsPath, httpHandler.Results)
|
||||
rtr.HandleFunc(livePath, httpHandler.Live)
|
||||
rtr.HandleFunc(readyPath, httpHandler.Ready)
|
||||
rtr.HandleFunc(heap, httpHandler.Heap)
|
||||
|
||||
server.Handler = rtr
|
||||
|
||||
logger.L().Info("Started Kubescape server", helpers.String("port", getPort()), helpers.String("version", cautils.BuildNumber))
|
||||
server.ListenAndServe()
|
||||
|
||||
servePprof()
|
||||
|
||||
if keyPair != nil {
|
||||
return server.ListenAndServeTLS("", "")
|
||||
}
|
||||
@@ -81,3 +81,13 @@ func getPort() string {
|
||||
}
|
||||
return "8080"
|
||||
}
|
||||
|
||||
func servePprof() {
|
||||
go func() {
|
||||
// start pprof server -> https://pkg.go.dev/net/http/pprof
|
||||
if logger.L().GetLevel() == helpers.DebugLevel.String() {
|
||||
logger.L().Info("starting pprof server", helpers.String("port", "6060"))
|
||||
logger.L().Error(http.ListenAndServe(":6060", nil).Error())
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user