diff --git a/httphandler/README.md b/httphandler/README.md index d7b33b56..c4541dd3 100644 --- a/httphandler/README.md +++ b/httphandler/README.md @@ -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 diff --git a/httphandler/handlerequests/v1/requestshandler.go b/httphandler/handlerequests/v1/requestshandler.go index 75252c20..ebebbea8 100644 --- a/httphandler/handlerequests/v1/requestshandler.go +++ b/httphandler/handlerequests/v1/requestshandler.go @@ -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 { diff --git a/httphandler/listener/init.go b/httphandler/listener/init.go index 0cea1e08..5b1d2bad 100644 --- a/httphandler/listener/init.go +++ b/httphandler/listener/init.go @@ -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") diff --git a/httphandler/listener/setup.go b/httphandler/listener/setup.go index 67e68b17..94ba1703 100644 --- a/httphandler/listener/setup.go +++ b/httphandler/listener/setup.go @@ -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()) + } + }() +}