Skip to content

Commit fdc1bad

Browse files
feat(config,main): add option to configure pprof
Co-authored-by: PrimalPimmy <Prashant20.pm@gmail.com> Signed-off-by: PrimalPimmy <Prashant20.pm@gmail.com> Signed-off-by: daemon1024 <barun1024@gmail.com>
1 parent 1fc5a38 commit fdc1bad

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

KubeArmor/config/config.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@ type KubearmorConfig struct {
3131
Visibility string // Container visibility to use
3232
HostVisibility string // Host visibility to use
3333

34-
Policy bool // Enable/Disable policy enforcement
35-
HostPolicy bool // Enable/Disable host policy enforcement
36-
KVMAgent bool // Enable/Disable KVM Agent
37-
K8sEnv bool // Is k8s env ?
34+
Policy bool // Enable/Disable policy enforcement
35+
EnablePPROF bool // Enable pprof to be used
36+
PPROFPort string // pprof Port to use
37+
HostPolicy bool // Enable/Disable host policy enforcement
38+
KVMAgent bool // Enable/Disable KVM Agent
39+
K8sEnv bool // Is k8s env ?
3840

3941
Debug bool // Enable/Disable KubeArmor debug mode
4042

@@ -70,6 +72,8 @@ const (
7072
PIDFilePath string = "/opt/kubearmor/kubearmor.pid"
7173
ConfigCluster string = "cluster"
7274
ConfigHost string = "host"
75+
ConfigEnablePPROF string = "pprofEnable"
76+
ConfigPPROFPort string = "pprofPort"
7377
ConfigGRPC string = "gRPC"
7478
ConfigTLSCertPath string = "tlsCertPath"
7579
ConfigTLSCertProvider string = "tlsCertProvider"
@@ -122,6 +126,8 @@ func readCmdLineParams() {
122126
hostVisStr := flag.String(ConfigHostVisibility, "default", "Host Visibility to use [process,file,network,capabilities,none] (default \"none\" for k8s, \"process,file,network,capabilities\" for VM)")
123127

124128
policyB := flag.Bool(ConfigKubearmorPolicy, true, "enabling KubeArmorPolicy")
129+
pprofEnableB := flag.Bool(ConfigEnablePPROF, false, "enables pprof to be used")
130+
pprofPortStr := flag.String(ConfigPPROFPort, "8080", "PPROF port number")
125131
hostPolicyB := flag.Bool(ConfigKubearmorHostPolicy, false, "enabling KubeArmorHostPolicy")
126132
kvmAgentB := flag.Bool(ConfigKubearmorVM, false, "enabling KubeArmorVM")
127133
k8sEnvB := flag.Bool(ConfigK8sEnv, true, "is k8s env?")
@@ -180,6 +186,8 @@ func readCmdLineParams() {
180186
viper.SetDefault(ConfigVisibility, *visStr)
181187
viper.SetDefault(ConfigHostVisibility, *hostVisStr)
182188

189+
viper.SetDefault(ConfigEnablePPROF, *pprofEnableB)
190+
viper.SetDefault(ConfigPPROFPort, *pprofPortStr)
183191
viper.SetDefault(ConfigKubearmorPolicy, *policyB)
184192
viper.SetDefault(ConfigKubearmorHostPolicy, *hostPolicyB)
185193
viper.SetDefault(ConfigKubearmorVM, *kvmAgentB)
@@ -263,6 +271,8 @@ func LoadConfig() error {
263271
GlobalCfg.Visibility = viper.GetString(ConfigVisibility)
264272
GlobalCfg.HostVisibility = viper.GetString(ConfigHostVisibility)
265273

274+
GlobalCfg.EnablePPROF = viper.GetBool(ConfigEnablePPROF)
275+
GlobalCfg.PPROFPort = viper.GetString(ConfigPPROFPort)
266276
GlobalCfg.Policy = viper.GetBool(ConfigKubearmorPolicy)
267277
GlobalCfg.HostPolicy = viper.GetBool(ConfigKubearmorHostPolicy)
268278
GlobalCfg.KVMAgent = viper.GetBool(ConfigKubearmorVM)

KubeArmor/main.go

+25
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
package main
66

77
import (
8+
"net/http"
9+
"net/http/pprof"
810
"os"
911
"path/filepath"
12+
"time"
1013

1114
cfg "github.com/kubearmor/KubeArmor/KubeArmor/config"
1215
"github.com/kubearmor/KubeArmor/KubeArmor/core"
@@ -76,5 +79,27 @@ func main() {
7679
return
7780
}
7881

82+
if cfg.GlobalCfg.EnablePPROF {
83+
go func() {
84+
mux := http.NewServeMux()
85+
86+
mux.HandleFunc("/debug/pprof/", pprof.Index)
87+
mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
88+
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
89+
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
90+
91+
server := &http.Server{
92+
Addr: "0.0.0.0:" + cfg.GlobalCfg.PPROFPort,
93+
Handler: mux,
94+
ReadHeaderTimeout: 10 * time.Second,
95+
}
96+
97+
kg.Printf("pprof server is running on http://0.0.0.0:" + cfg.GlobalCfg.PPROFPort)
98+
if err := server.ListenAndServe(); err != nil {
99+
kg.Errf("Could not expose a pprof server due to %s", err.Error())
100+
}
101+
}()
102+
}
103+
79104
core.KubeArmor()
80105
}

0 commit comments

Comments
 (0)