aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gier <pgier@redhat.com>2020-02-20 04:03:33 -0600
committerGitHub <noreply@github.com>2020-02-20 11:03:33 +0100
commitb40954dce598577413d93ce32cc005b57c6371bb (patch)
tree911d0fb27f982d358ad526f830cecbe828fe2c4b
parent3e1b0f1bee40af140c1349ab401392882ed658de (diff)
downloadprometheus_node_collector-b40954dce598577413d93ce32cc005b57c6371bb.tar.bz2
prometheus_node_collector-b40954dce598577413d93ce32cc005b57c6371bb.tar.xz
prometheus_node_collector-b40954dce598577413d93ce32cc005b57c6371bb.zip
new flag to disable all default collectors (#1460)
* new flag to disable all default collectors Signed-off-by: Paul Gier <pgier@redhat.com> Co-authored-by: Ben Kochie <superq@gmail.com>
-rw-r--r--CHANGELOG.md1
-rw-r--r--collector/collector.go31
-rw-r--r--node_exporter.go9
3 files changed, 36 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a109af1..f017b57 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,7 @@
18* [CHANGE] Refactor mdadm collector #1403 18* [CHANGE] Refactor mdadm collector #1403
19* [CHANGE] Add `mountaddr` label to NFS metrics. #1417 19* [CHANGE] Add `mountaddr` label to NFS metrics. #1417
20* [CHANGE] Don't count empty collectors as success. #... 20* [CHANGE] Don't count empty collectors as success. #...
21* [FEATURE] New flag to disable default collectors #1276
21* [FEATURE] Add new schedstat collector #1389 22* [FEATURE] Add new schedstat collector #1389
22* [FEATURE] Add uname support for Darwin and OpenBSD #1433 23* [FEATURE] Add uname support for Darwin and OpenBSD #1433
23* [FEATURE] Add new metric node_cpu_info #1489 24* [FEATURE] Add new metric node_cpu_info #1489
diff --git a/collector/collector.go b/collector/collector.go
index 0fec09c..e9ea14c 100644
--- a/collector/collector.go
+++ b/collector/collector.go
@@ -23,7 +23,7 @@ import (
23 "github.com/go-kit/kit/log" 23 "github.com/go-kit/kit/log"
24 "github.com/go-kit/kit/log/level" 24 "github.com/go-kit/kit/log/level"
25 "github.com/prometheus/client_golang/prometheus" 25 "github.com/prometheus/client_golang/prometheus"
26 "gopkg.in/alecthomas/kingpin.v2" 26 kingpin "gopkg.in/alecthomas/kingpin.v2"
27) 27)
28 28
29// Namespace defines the common namespace to be used by all metrics. 29// Namespace defines the common namespace to be used by all metrics.
@@ -50,8 +50,9 @@ const (
50) 50)
51 51
52var ( 52var (
53 factories = make(map[string]func(logger log.Logger) (Collector, error)) 53 factories = make(map[string]func(logger log.Logger) (Collector, error))
54 collectorState = make(map[string]*bool) 54 collectorState = make(map[string]*bool)
55 forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled
55) 56)
56 57
57func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) { 58func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) {
@@ -66,7 +67,7 @@ func registerCollector(collector string, isDefaultEnabled bool, factory func(log
66 flagHelp := fmt.Sprintf("Enable the %s collector (default: %s).", collector, helpDefaultState) 67 flagHelp := fmt.Sprintf("Enable the %s collector (default: %s).", collector, helpDefaultState)
67 defaultValue := fmt.Sprintf("%v", isDefaultEnabled) 68 defaultValue := fmt.Sprintf("%v", isDefaultEnabled)
68 69
69 flag := kingpin.Flag(flagName, flagHelp).Default(defaultValue).Bool() 70 flag := kingpin.Flag(flagName, flagHelp).Default(defaultValue).Action(collectorFlagAction(collector)).Bool()
70 collectorState[collector] = flag 71 collectorState[collector] = flag
71 72
72 factories[collector] = factory 73 factories[collector] = factory
@@ -78,6 +79,28 @@ type NodeCollector struct {
78 logger log.Logger 79 logger log.Logger
79} 80}
80 81
82// DisableDefaultCollectors sets the collector state to false for all collectors which
83// have not been explicitly enabled on the command line.
84func DisableDefaultCollectors() {
85 for c := range collectorState {
86 if _, ok := forcedCollectors[c]; !ok {
87 *collectorState[c] = false
88 }
89 }
90}
91
92// collectorFlagAction generates a new action function for the given collector
93// to track whether it has been explicitly enabled or disabled from the command line.
94// A new action function is needed for each collector flag because the ParseContext
95// does not contain information about which flag called the action.
96// See: https://github.com/alecthomas/kingpin/issues/294
97func collectorFlagAction(collector string) func(ctx *kingpin.ParseContext) error {
98 return func(ctx *kingpin.ParseContext) error {
99 forcedCollectors[collector] = true
100 return nil
101 }
102}
103
81// NewNodeCollector creates a new NodeCollector. 104// NewNodeCollector creates a new NodeCollector.
82func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) { 105func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) {
83 f := make(map[string]bool) 106 f := make(map[string]bool)
diff --git a/node_exporter.go b/node_exporter.go
index 6e92cc3..88039bd 100644
--- a/node_exporter.go
+++ b/node_exporter.go
@@ -29,7 +29,7 @@ import (
29 "github.com/prometheus/common/version" 29 "github.com/prometheus/common/version"
30 "github.com/prometheus/node_exporter/collector" 30 "github.com/prometheus/node_exporter/collector"
31 "github.com/prometheus/node_exporter/https" 31 "github.com/prometheus/node_exporter/https"
32 "gopkg.in/alecthomas/kingpin.v2" 32 kingpin "gopkg.in/alecthomas/kingpin.v2"
33) 33)
34 34
35// handler wraps an unfiltered http.Handler but uses a filtered handler, 35// handler wraps an unfiltered http.Handler but uses a filtered handler,
@@ -153,6 +153,10 @@ func main() {
153 "web.max-requests", 153 "web.max-requests",
154 "Maximum number of parallel scrape requests. Use 0 to disable.", 154 "Maximum number of parallel scrape requests. Use 0 to disable.",
155 ).Default("40").Int() 155 ).Default("40").Int()
156 disableDefaultCollectors = kingpin.Flag(
157 "collector.disable-defaults",
158 "Set all collectors to disabled by default.",
159 ).Default("false").Bool()
156 configFile = kingpin.Flag( 160 configFile = kingpin.Flag(
157 "web.config", 161 "web.config",
158 "Path to config yaml file that can enable TLS or authentication.", 162 "Path to config yaml file that can enable TLS or authentication.",
@@ -166,6 +170,9 @@ func main() {
166 kingpin.Parse() 170 kingpin.Parse()
167 logger := promlog.New(promlogConfig) 171 logger := promlog.New(promlogConfig)
168 172
173 if *disableDefaultCollectors {
174 collector.DisableDefaultCollectors()
175 }
169 level.Info(logger).Log("msg", "Starting node_exporter", "version", version.Info()) 176 level.Info(logger).Log("msg", "Starting node_exporter", "version", version.Info())
170 level.Info(logger).Log("msg", "Build context", "build_context", version.BuildContext()) 177 level.Info(logger).Log("msg", "Build context", "build_context", version.BuildContext())
171 178