From 61139063914a32db9d7bff0890f92f4eef6e9830 Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Tue, 15 May 2018 09:00:09 -0400 Subject: [PATCH] pkg/sdk: Add /debug and /metrics http endpoints listen on :8080 and expose default prometheus metrics on /metrics and pprof information on /debug/pprof --- Gopkg.lock | 50 +++++++++++++++++++++++++++++++- pkg/generator/deploy_tmpl.go | 3 ++ pkg/generator/gen_deploy_test.go | 3 ++ pkg/generator/generator_test.go | 1 + pkg/generator/main_tmpl.go | 1 + pkg/sdk/api.go | 16 ++++++++++ pkg/sdk/metrics/metrics.go | 12 ++++++++ pkg/sdk/pprof/pprof.go | 5 ++++ 8 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 pkg/sdk/metrics/metrics.go create mode 100644 pkg/sdk/pprof/pprof.go diff --git a/Gopkg.lock b/Gopkg.lock index f8180644e3..182bfebc0f 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -13,6 +13,12 @@ packages = ["."] revision = "de5bf2ad457846296e2031421a34e2568e304e35" +[[projects]] + branch = "master" + name = "github.com/beorn7/perks" + packages = ["quantile"] + revision = "3a771d992973f24aa725d07868b467d1ddfceafb" + [[projects]] name = "github.com/davecgh/go-spew" packages = ["spew"] @@ -165,6 +171,12 @@ ] revision = "32fa128f234d041f196a9f3e0fea5ac9772c08e1" +[[projects]] + name = "github.com/matttproud/golang_protobuf_extensions" + packages = ["pbutil"] + revision = "3247c84500bff8d9fb6d579d800f20b3e091582c" + version = "v1.0.0" + [[projects]] branch = "master" name = "github.com/petar/GoLLRB" @@ -177,6 +189,42 @@ revision = "5f041e8faa004a95c88a202771f4cc3e991971e6" version = "v2.0.1" +[[projects]] + name = "github.com/prometheus/client_golang" + packages = [ + "prometheus", + "prometheus/promhttp" + ] + revision = "c5b7fccd204277076155f10851dad72b76a49317" + version = "v0.8.0" + +[[projects]] + branch = "master" + name = "github.com/prometheus/client_model" + packages = ["go"] + revision = "99fa1f4be8e564e8a6b613da7fa6f46c9edafc6c" + +[[projects]] + branch = "master" + name = "github.com/prometheus/common" + packages = [ + "expfmt", + "internal/bitbucket.org/ww/goautoneg", + "model" + ] + revision = "d811d2e9bf898806ecfb6ef6296774b13ffc314c" + +[[projects]] + branch = "master" + name = "github.com/prometheus/procfs" + packages = [ + ".", + "internal/util", + "nfs", + "xfs" + ] + revision = "8b1c2da0d56deffdbb9e48d4414b4e674bd8083e" + [[projects]] name = "github.com/sirupsen/logrus" packages = ["."] @@ -404,6 +452,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "d5cc928bcf8f796babddedb13b1516b8d6fbc2f48d68546b712af753671673e2" + inputs-digest = "258254390be71f18d8a475c6af36aa0c76507f2560287356c5b5d3b793437762" solver-name = "gps-cdcl" solver-version = 1 diff --git a/pkg/generator/deploy_tmpl.go b/pkg/generator/deploy_tmpl.go index 94f15411c1..ba96c4ccda 100644 --- a/pkg/generator/deploy_tmpl.go +++ b/pkg/generator/deploy_tmpl.go @@ -54,6 +54,9 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + ports: + - containerPort: 8080 + name: metrics ` const rbacYamlTmpl = `kind: Role diff --git a/pkg/generator/gen_deploy_test.go b/pkg/generator/gen_deploy_test.go index 80b27681ac..c8a9a94f72 100644 --- a/pkg/generator/gen_deploy_test.go +++ b/pkg/generator/gen_deploy_test.go @@ -45,6 +45,9 @@ spec: valueFrom: fieldRef: fieldPath: metadata.namespace + ports: + - containerPort: 8080 + name: metrics ` const rbacYamlExp = `kind: Role diff --git a/pkg/generator/generator_test.go b/pkg/generator/generator_test.go index 75a283b8ab..04e1d70c10 100644 --- a/pkg/generator/generator_test.go +++ b/pkg/generator/generator_test.go @@ -41,6 +41,7 @@ func printVersion() { func main() { printVersion() + sdk.RegisterMetrics() resource := "app.example.com/v1alpha1" kind := "AppService" diff --git a/pkg/generator/main_tmpl.go b/pkg/generator/main_tmpl.go index 7737784bbe..eff2fce4c0 100644 --- a/pkg/generator/main_tmpl.go +++ b/pkg/generator/main_tmpl.go @@ -37,6 +37,7 @@ func printVersion() { func main() { printVersion() + sdk.RegisterMetrics() resource := "{{.APIVersion}}" kind := "{{.Kind}}" diff --git a/pkg/sdk/api.go b/pkg/sdk/api.go index 9d074eda89..7c4b8e940b 100644 --- a/pkg/sdk/api.go +++ b/pkg/sdk/api.go @@ -16,10 +16,13 @@ package sdk import ( "context" + "net/http" "github.com/operator-framework/operator-sdk/pkg/k8sclient" sdkHandler "github.com/operator-framework/operator-sdk/pkg/sdk/handler" sdkInformer "github.com/operator-framework/operator-sdk/pkg/sdk/informer" + sdkMetrics "github.com/operator-framework/operator-sdk/pkg/sdk/metrics" + _ "github.com/operator-framework/operator-sdk/pkg/sdk/pprof" "github.com/sirupsen/logrus" ) @@ -64,3 +67,16 @@ func Run(ctx context.Context) { } <-ctx.Done() } + +func RegisterMetrics() { + addr := ":8080" + if err := sdkMetrics.Register(); err != nil { + logrus.Errorf("failed to register metrics: %v", err) + panic(err) + } + // pprof was registered to http.DefaultServeMutex just by importing the package + go func() { + logrus.Println(http.ListenAndServe(addr, nil)) + }() + logrus.Infof("Metrics and pprof registered on: %s", addr) +} diff --git a/pkg/sdk/metrics/metrics.go b/pkg/sdk/metrics/metrics.go new file mode 100644 index 0000000000..177b4301ea --- /dev/null +++ b/pkg/sdk/metrics/metrics.go @@ -0,0 +1,12 @@ +package metrics + +import ( + "net/http" + + "github.com/prometheus/client_golang/prometheus/promhttp" +) + +func Register() error { + http.Handle("/metrics", promhttp.Handler()) + return nil +} diff --git a/pkg/sdk/pprof/pprof.go b/pkg/sdk/pprof/pprof.go new file mode 100644 index 0000000000..04a63952e2 --- /dev/null +++ b/pkg/sdk/pprof/pprof.go @@ -0,0 +1,5 @@ +package pprof + +import ( + _ "net/http/pprof" +)