adding pprof

This commit is contained in:
David Wertenteil
2022-08-01 09:49:50 +03:00
parent c7450adc77
commit a6c19bc286
4 changed files with 41 additions and 13 deletions
+2
View File
@@ -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 {
+25 -2
View File
@@ -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")
+13 -3
View File
@@ -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())
}
}()
}