new flag to disable all default collectors

Signed-off-by: Paul Gier <pgier@redhat.com>
This commit is contained in:
Paul Gier 2019-08-28 14:53:43 -05:00 committed by Ben Kochie
parent 1a75bc7b50
commit cc43e980ca
No known key found for this signature in database
GPG key ID: C646B23C9E3245F1
3 changed files with 36 additions and 5 deletions

View file

@ -13,6 +13,7 @@
### Changes
* [FEATURE] New flag to disable default collectors #735, #1276
* [CHANGE] Add `--collector.netdev.device-whitelist`. #1279
* [CHANGE] Refactor mdadm collector #1403
* [CHANGE] Add `mountaddr` label to NFS metrics. #1417

View file

@ -22,7 +22,7 @@ import (
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/log/level"
"github.com/prometheus/client_golang/prometheus"
"gopkg.in/alecthomas/kingpin.v2"
kingpin "gopkg.in/alecthomas/kingpin.v2"
)
// Namespace defines the common namespace to be used by all metrics.
@ -49,8 +49,9 @@ const (
)
var (
factories = make(map[string]func(logger log.Logger) (Collector, error))
collectorState = make(map[string]*bool)
factories = make(map[string]func(logger log.Logger) (Collector, error))
collectorState = make(map[string]*bool)
forcedCollectors = map[string]bool{} // collectors which have been explicitly enabled or disabled
)
func registerCollector(collector string, isDefaultEnabled bool, factory func(logger log.Logger) (Collector, error)) {
@ -65,7 +66,7 @@ func registerCollector(collector string, isDefaultEnabled bool, factory func(log
flagHelp := fmt.Sprintf("Enable the %s collector (default: %s).", collector, helpDefaultState)
defaultValue := fmt.Sprintf("%v", isDefaultEnabled)
flag := kingpin.Flag(flagName, flagHelp).Default(defaultValue).Bool()
flag := kingpin.Flag(flagName, flagHelp).Default(defaultValue).Action(collectorFlagAction(collector)).Bool()
collectorState[collector] = flag
factories[collector] = factory
@ -77,6 +78,28 @@ type NodeCollector struct {
logger log.Logger
}
// DisableDefaultCollectors sets the collector state to false for all collectors which
// have not been explicitly enabled on the command line.
func DisableDefaultCollectors() {
for c := range collectorState {
if _, ok := forcedCollectors[c]; !ok {
*collectorState[c] = false
}
}
}
// collectorFlagAction generates a new action function for the given collector
// to track whether it has been explicitly enabled or disabled from the command line.
// A new action function is needed for each collector flag because the ParseContext
// does not contain information about which flag called the action.
// See: https://github.com/alecthomas/kingpin/issues/294
func collectorFlagAction(collector string) func(ctx *kingpin.ParseContext) error {
return func(ctx *kingpin.ParseContext) error {
forcedCollectors[collector] = true
return nil
}
}
// NewNodeCollector creates a new NodeCollector.
func NewNodeCollector(logger log.Logger, filters ...string) (*NodeCollector, error) {
f := make(map[string]bool)

View file

@ -29,7 +29,7 @@ import (
"github.com/prometheus/common/version"
"github.com/prometheus/node_exporter/collector"
"github.com/prometheus/node_exporter/https"
"gopkg.in/alecthomas/kingpin.v2"
kingpin "gopkg.in/alecthomas/kingpin.v2"
)
// handler wraps an unfiltered http.Handler but uses a filtered handler,
@ -157,6 +157,10 @@ func main() {
"web.config",
"Path to config yaml file that can enable TLS or authentication.",
).Default("").String()
disableDefaultCollectors = kingpin.Flag(
"collectors.disable-default",
"Set all collectors to disabled by default.",
).Default("false").Bool()
)
promlogConfig := &promlog.Config{}
@ -166,6 +170,9 @@ func main() {
kingpin.Parse()
logger := promlog.New(promlogConfig)
if *disableDefaultCollectors {
collector.DisableDefaultCollectors()
}
level.Info(logger).Log("msg", "Starting node_exporter", "version", version.Info())
level.Info(logger).Log("msg", "Build context", "build_context", version.BuildContext())