diff options
author | Paul Gier <pgier@redhat.com> | 2020-02-20 04:03:33 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-20 11:03:33 +0100 |
commit | b40954dce598577413d93ce32cc005b57c6371bb (patch) | |
tree | 911d0fb27f982d358ad526f830cecbe828fe2c4b | |
parent | 3e1b0f1bee40af140c1349ab401392882ed658de (diff) | |
download | prometheus_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.md | 1 | ||||
-rw-r--r-- | collector/collector.go | 31 | ||||
-rw-r--r-- | node_exporter.go | 9 |
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 | ||
52 | var ( | 52 | var ( |
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 | ||
57 | func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) { | 58 | func 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. | ||
84 | func 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 | ||
97 | func 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. |
82 | func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) { | 105 | func 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 | ||