From 310ef47d99ed94256169f97de0cf3538acce2465 Mon Sep 17 00:00:00 2001 From: Marc CARRE Date: Thu, 5 Oct 2017 20:35:04 +0100 Subject: [PATCH] Simplify promrus setup by using MustNewPrometheusHook. Less verbose and DRY-er hook creation. --- Gopkg.lock | 6 +-- Gopkg.toml | 2 +- cmd/alertmanager/main.go | 6 +-- cmd/configs/main.go | 6 +-- cmd/distributor/main.go | 7 +-- cmd/ingester/main.go | 6 +-- cmd/lite/main.go | 6 +-- cmd/querier/main.go | 6 +-- cmd/ruler/main.go | 6 +-- cmd/table-manager/main.go | 7 +-- .../github.com/weaveworks/promrus/README.md | 5 +- .../github.com/weaveworks/promrus/promrus.go | 13 +++++ .../weaveworks/promrus/promrus_test.go | 49 +++++++++---------- 13 files changed, 53 insertions(+), 72 deletions(-) diff --git a/Gopkg.lock b/Gopkg.lock index 7ddaa066a6d..6fc6c0044c7 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -546,8 +546,8 @@ [[projects]] name = "github.com/weaveworks/promrus" packages = ["."] - revision = "0eadec5d0f597c43c2107b8fee02b7ea7f92e9b2" - version = "v1.0.0-legacy" + revision = "2864c50798f22ea4ceaaad3dd35c8c6c1e05daee" + version = "v1.1.0-legacy" [[projects]] branch = "master" @@ -642,6 +642,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "2d013ed5c812b3170cfb22111cbfd6d180bd43ca85496f0ccea0a31d38082cf2" + inputs-digest = "4fa3bb878529b3633701283addf8cb9d4216d312fd3ba95842de77759407f166" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 66093a14750..9adeb0f4e8f 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -12,7 +12,7 @@ [[constraint]] name = "github.com/weaveworks/promrus" - version = "v1.0.0-legacy" + version = "v1.1.0-legacy" [[override]] name = "github.com/Azure/azure-sdk-for-go" diff --git a/cmd/alertmanager/main.go b/cmd/alertmanager/main.go index 71667911b7b..3b0d0bb23e1 100644 --- a/cmd/alertmanager/main.go +++ b/cmd/alertmanager/main.go @@ -38,10 +38,8 @@ func main() { ) util.RegisterFlags(&serverConfig, &alertmanagerConfig) flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } + + hook := promrus.MustNewPrometheusHook() log.AddHook(hook) multiAM, err := alertmanager.NewMultitenantAlertmanager(&alertmanagerConfig) diff --git a/cmd/configs/main.go b/cmd/configs/main.go index 32f93e4e30a..4fd0ba69128 100644 --- a/cmd/configs/main.go +++ b/cmd/configs/main.go @@ -29,11 +29,7 @@ func main() { util.RegisterFlags(&serverConfig, &dbConfig) flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } - log.AddHook(hook) + log.AddHook(promrus.MustNewPrometheusHook()) db, err := db.New(dbConfig) if err != nil { diff --git a/cmd/distributor/main.go b/cmd/distributor/main.go index d67d5b44855..a54fcf853f0 100644 --- a/cmd/distributor/main.go +++ b/cmd/distributor/main.go @@ -46,11 +46,8 @@ func main() { ) util.RegisterFlags(&serverConfig, &ringConfig, &distributorConfig) flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } - log.AddHook(hook) + + log.AddHook(promrus.MustNewPrometheusHook()) r, err := ring.New(ringConfig) if err != nil { diff --git a/cmd/ingester/main.go b/cmd/ingester/main.go index f210cb737f2..51c984ceb2a 100644 --- a/cmd/ingester/main.go +++ b/cmd/ingester/main.go @@ -37,11 +37,7 @@ func main() { &schemaConfig, &ingesterConfig) flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } - log.AddHook(hook) + log.AddHook(promrus.MustNewPrometheusHook()) server, err := server.New(serverConfig) if err != nil { diff --git a/cmd/lite/main.go b/cmd/lite/main.go index 0347536c422..01b9a16d895 100644 --- a/cmd/lite/main.go +++ b/cmd/lite/main.go @@ -52,11 +52,7 @@ func main() { flag.BoolVar(&unauthenticated, "unauthenticated", false, "Set to true to disable multitenancy.") flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } - log.AddHook(hook) + log.AddHook(promrus.MustNewPrometheusHook()) server, err := server.New(serverConfig) if err != nil { diff --git a/cmd/querier/main.go b/cmd/querier/main.go index 3a9a38f443b..fceadf42c28 100644 --- a/cmd/querier/main.go +++ b/cmd/querier/main.go @@ -42,11 +42,7 @@ func main() { &chunkStoreConfig, &schemaConfig, &storageConfig) flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } - log.AddHook(hook) + log.AddHook(promrus.MustNewPrometheusHook()) r, err := ring.New(ringConfig) if err != nil { diff --git a/cmd/ruler/main.go b/cmd/ruler/main.go index 2a808d86c6e..ba4d8e8144f 100644 --- a/cmd/ruler/main.go +++ b/cmd/ruler/main.go @@ -37,11 +37,7 @@ func main() { &rulerConfig, &chunkStoreConfig, &storageConfig, &schemaConfig) flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } - log.AddHook(hook) + log.AddHook(promrus.MustNewPrometheusHook()) storageClient, err := storage.NewStorageClient(storageConfig, schemaConfig) if err != nil { diff --git a/cmd/table-manager/main.go b/cmd/table-manager/main.go index bdfc74489d2..e9366c92ee6 100644 --- a/cmd/table-manager/main.go +++ b/cmd/table-manager/main.go @@ -28,11 +28,8 @@ func main() { ) util.RegisterFlags(&serverConfig, &storageConfig, &schemaConfig) flag.Parse() - hook, err := promrus.NewPrometheusHook() - if err != nil { - log.Fatalf("Error initializing promrus: %v", err) - } - log.AddHook(hook) + + log.AddHook(promrus.MustNewPrometheusHook()) if (schemaConfig.ChunkTables.WriteScale.Enabled || schemaConfig.IndexTables.WriteScale.Enabled || diff --git a/vendor/github.com/weaveworks/promrus/README.md b/vendor/github.com/weaveworks/promrus/README.md index 3e164045412..213a320b3b7 100644 --- a/vendor/github.com/weaveworks/promrus/README.md +++ b/vendor/github.com/weaveworks/promrus/README.md @@ -42,10 +42,7 @@ import ( func main() { // Create the Prometheus hook: - hook, err := promrus.NewPrometheusHook() - if err != nil { - return - } + hook := promrus.MustNewPrometheusHook() // Configure logrus to use the Prometheus hook: log.AddHook(hook) diff --git a/vendor/github.com/weaveworks/promrus/promrus.go b/vendor/github.com/weaveworks/promrus/promrus.go index af9ea24334a..950a58375a1 100644 --- a/vendor/github.com/weaveworks/promrus/promrus.go +++ b/vendor/github.com/weaveworks/promrus/promrus.go @@ -13,6 +13,8 @@ type PrometheusHook struct { var supportedLevels = []logrus.Level{logrus.DebugLevel, logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel} // NewPrometheusHook creates a new instance of PrometheusHook which exposes Prometheus counters for various log levels. +// Contrarily to MustNewPrometheusHook, it returns an error to the caller in case of issue. +// Use NewPrometheusHook if you want more control. Use MustNewPrometheusHook if you want a less verbose hook creation. func NewPrometheusHook() (*PrometheusHook, error) { counterVec := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "log_messages", @@ -32,6 +34,17 @@ func NewPrometheusHook() (*PrometheusHook, error) { }, nil } +// MustNewPrometheusHook creates a new instance of PrometheusHook which exposes Prometheus counters for various log levels. +// Contrarily to NewPrometheusHook, it does not return any error to the caller, but panics instead. +// Use MustNewPrometheusHook if you want a less verbose hook creation. Use NewPrometheusHook if you want more control. +func MustNewPrometheusHook() *PrometheusHook { + hook, err := NewPrometheusHook() + if err != nil { + panic(err) + } + return hook +} + // Fire increments the appropriate Prometheus counter depending on the entry's log level. func (hook *PrometheusHook) Fire(entry *logrus.Entry) error { hook.counterVec.WithLabelValues(entry.Level.String()).Inc() diff --git a/vendor/github.com/weaveworks/promrus/promrus_test.go b/vendor/github.com/weaveworks/promrus/promrus_test.go index fdc145e77a0..8486327a009 100644 --- a/vendor/github.com/weaveworks/promrus/promrus_test.go +++ b/vendor/github.com/weaveworks/promrus/promrus_test.go @@ -9,10 +9,10 @@ import ( "strings" "testing" - "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/stretchr/testify/assert" + "github.com/weaveworks/promrus" ) @@ -23,46 +23,45 @@ const ( func TestExposeAndQueryLogrusCounters(t *testing.T) { // Create Prometheus hook and configure logrus to use it: - hook, err := promrus.NewPrometheusHook() - assert.Nil(t, err) + hook := promrus.MustNewPrometheusHook() log.AddHook(hook) - log.SetLevel(logrus.DebugLevel) + log.SetLevel(log.DebugLevel) httpServePrometheusMetrics(t) lines := httpGetMetrics(t) - assert.Equal(t, 0, countFor(t, logrus.DebugLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.InfoLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.WarnLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.ErrorLevel, lines)) + assert.Equal(t, 0, countFor(t, log.DebugLevel, lines)) + assert.Equal(t, 0, countFor(t, log.InfoLevel, lines)) + assert.Equal(t, 0, countFor(t, log.WarnLevel, lines)) + assert.Equal(t, 0, countFor(t, log.ErrorLevel, lines)) log.Debug("this is at debug level!") lines = httpGetMetrics(t) - assert.Equal(t, 1, countFor(t, logrus.DebugLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.InfoLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.WarnLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.ErrorLevel, lines)) + assert.Equal(t, 1, countFor(t, log.DebugLevel, lines)) + assert.Equal(t, 0, countFor(t, log.InfoLevel, lines)) + assert.Equal(t, 0, countFor(t, log.WarnLevel, lines)) + assert.Equal(t, 0, countFor(t, log.ErrorLevel, lines)) log.Info("this is at info level!") lines = httpGetMetrics(t) - assert.Equal(t, 1, countFor(t, logrus.DebugLevel, lines)) - assert.Equal(t, 1, countFor(t, logrus.InfoLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.WarnLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.ErrorLevel, lines)) + assert.Equal(t, 1, countFor(t, log.DebugLevel, lines)) + assert.Equal(t, 1, countFor(t, log.InfoLevel, lines)) + assert.Equal(t, 0, countFor(t, log.WarnLevel, lines)) + assert.Equal(t, 0, countFor(t, log.ErrorLevel, lines)) log.Warn("this is at warning level!") lines = httpGetMetrics(t) - assert.Equal(t, 1, countFor(t, logrus.DebugLevel, lines)) - assert.Equal(t, 1, countFor(t, logrus.InfoLevel, lines)) - assert.Equal(t, 1, countFor(t, logrus.WarnLevel, lines)) - assert.Equal(t, 0, countFor(t, logrus.ErrorLevel, lines)) + assert.Equal(t, 1, countFor(t, log.DebugLevel, lines)) + assert.Equal(t, 1, countFor(t, log.InfoLevel, lines)) + assert.Equal(t, 1, countFor(t, log.WarnLevel, lines)) + assert.Equal(t, 0, countFor(t, log.ErrorLevel, lines)) log.Error("this is at error level!") lines = httpGetMetrics(t) - assert.Equal(t, 1, countFor(t, logrus.DebugLevel, lines)) - assert.Equal(t, 1, countFor(t, logrus.InfoLevel, lines)) - assert.Equal(t, 1, countFor(t, logrus.WarnLevel, lines)) - assert.Equal(t, 1, countFor(t, logrus.ErrorLevel, lines)) + assert.Equal(t, 1, countFor(t, log.DebugLevel, lines)) + assert.Equal(t, 1, countFor(t, log.InfoLevel, lines)) + assert.Equal(t, 1, countFor(t, log.WarnLevel, lines)) + assert.Equal(t, 1, countFor(t, log.ErrorLevel, lines)) } // httpServePrometheusMetrics exposes the Prometheus metrics over HTTP, in a different go routine. @@ -85,7 +84,7 @@ func httpGetMetrics(t *testing.T) []string { } // countFor is a helper function to get the counter's value for the provided level. -func countFor(t *testing.T, level logrus.Level, lines []string) int { +func countFor(t *testing.T, level log.Level, lines []string) int { // Metrics are exposed as per the below example: // # HELP test_debug Number of log statements at debug level. // # TYPE test_debug counter