aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Kochie <superq@gmail.com>2020-06-14 10:39:43 +0200
committerGitHub <noreply@github.com>2020-06-14 10:39:43 +0200
commit7790f968813563cc01264ba3f91001592e55f110 (patch)
tree8f5e39d0cdf3e13ab93525e87f76cf3107b84f2f
parent2cefe3d769b161388fe3635a7243cffaac803d43 (diff)
parent7e49b68d3a994bce083de9a7258d30ded7391c8b (diff)
downloadprometheus_node_collector-7790f968813563cc01264ba3f91001592e55f110.tar.bz2
prometheus_node_collector-7790f968813563cc01264ba3f91001592e55f110.tar.xz
prometheus_node_collector-7790f968813563cc01264ba3f91001592e55f110.zip
Merge pull request #1743 from prometheus/superq/flags
Improve filter flag names.
-rw-r--r--CHANGELOG.md1
-rw-r--r--collector/filesystem_common.go3
-rw-r--r--collector/netdev_common.go65
-rw-r--r--collector/systemd_linux.go44
-rw-r--r--collector/systemd_linux_test.go10
5 files changed, 86 insertions, 37 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7f32b94..5372bfb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
1## master / unreleased 1## master / unreleased
2 2
3* [CHANGE] Improve filter flag names.
3* [CHANGE] 4* [CHANGE]
4* [FEATURE] 5* [FEATURE]
5* [ENHANCEMENT] 6* [ENHANCEMENT]
diff --git a/collector/filesystem_common.go b/collector/filesystem_common.go
index 6971f44..7def2b9 100644
--- a/collector/filesystem_common.go
+++ b/collector/filesystem_common.go
@@ -20,6 +20,7 @@ import (
20 "regexp" 20 "regexp"
21 21
22 "github.com/go-kit/kit/log" 22 "github.com/go-kit/kit/log"
23 "github.com/go-kit/kit/log/level"
23 "github.com/prometheus/client_golang/prometheus" 24 "github.com/prometheus/client_golang/prometheus"
24 "gopkg.in/alecthomas/kingpin.v2" 25 "gopkg.in/alecthomas/kingpin.v2"
25) 26)
@@ -70,7 +71,9 @@ func init() {
70// NewFilesystemCollector returns a new Collector exposing filesystems stats. 71// NewFilesystemCollector returns a new Collector exposing filesystems stats.
71func NewFilesystemCollector(logger log.Logger) (Collector, error) { 72func NewFilesystemCollector(logger log.Logger) (Collector, error) {
72 subsystem := "filesystem" 73 subsystem := "filesystem"
74 level.Info(logger).Log("msg", "Parsed flag --collector.filesystem.ignored-mount-points", "flag", *ignoredMountPoints)
73 mountPointPattern := regexp.MustCompile(*ignoredMountPoints) 75 mountPointPattern := regexp.MustCompile(*ignoredMountPoints)
76 level.Info(logger).Log("msg", "Parsed flag --collector.filesystem.ignored-fs-types", "flag", *ignoredMountPoints)
74 filesystemsTypesPattern := regexp.MustCompile(*ignoredFSTypes) 77 filesystemsTypesPattern := regexp.MustCompile(*ignoredFSTypes)
75 78
76 sizeDesc := prometheus.NewDesc( 79 sizeDesc := prometheus.NewDesc(
diff --git a/collector/netdev_common.go b/collector/netdev_common.go
index 2164469..656e2aa 100644
--- a/collector/netdev_common.go
+++ b/collector/netdev_common.go
@@ -23,21 +23,24 @@ import (
23 "strconv" 23 "strconv"
24 24
25 "github.com/go-kit/kit/log" 25 "github.com/go-kit/kit/log"
26 "github.com/go-kit/kit/log/level"
26 "github.com/prometheus/client_golang/prometheus" 27 "github.com/prometheus/client_golang/prometheus"
27 "gopkg.in/alecthomas/kingpin.v2" 28 "gopkg.in/alecthomas/kingpin.v2"
28) 29)
29 30
30var ( 31var (
31 netdevIgnoredDevices = kingpin.Flag("collector.netdev.device-blacklist", "Regexp of net devices to blacklist (mutually exclusive to device-whitelist).").String() 32 netdevDeviceInclude = kingpin.Flag("collector.netdev.device-include", "Regexp of net devices to include (mutually exclusive to device-exclude).").String()
32 netdevAcceptDevices = kingpin.Flag("collector.netdev.device-whitelist", "Regexp of net devices to whitelist (mutually exclusive to device-blacklist).").String() 33 oldNetdevDeviceInclude = kingpin.Flag("collector.netdev.device-whitelist", "DEPRECATED: Use collector.netdev.device-include").Hidden().String()
34 netdevDeviceExclude = kingpin.Flag("collector.netdev.device-exclude", "Regexp of net devices to exclude (mutually exclusive to device-include).").String()
35 oldNetdevDeviceExclude = kingpin.Flag("collector.netdev.device-blacklist", "DEPRECATED: Use collector.netdev.device-exclude").Hidden().String()
33) 36)
34 37
35type netDevCollector struct { 38type netDevCollector struct {
36 subsystem string 39 subsystem string
37 ignoredDevicesPattern *regexp.Regexp 40 deviceExcludePattern *regexp.Regexp
38 acceptDevicesPattern *regexp.Regexp 41 deviceIncludePattern *regexp.Regexp
39 metricDescs map[string]*prometheus.Desc 42 metricDescs map[string]*prometheus.Desc
40 logger log.Logger 43 logger log.Logger
41} 44}
42 45
43func init() { 46func init() {
@@ -46,31 +49,51 @@ func init() {
46 49
47// NewNetDevCollector returns a new Collector exposing network device stats. 50// NewNetDevCollector returns a new Collector exposing network device stats.
48func NewNetDevCollector(logger log.Logger) (Collector, error) { 51func NewNetDevCollector(logger log.Logger) (Collector, error) {
49 if *netdevIgnoredDevices != "" && *netdevAcceptDevices != "" { 52 if *oldNetdevDeviceInclude != "" {
50 return nil, errors.New("device-blacklist & accept-devices are mutually exclusive") 53 if *netdevDeviceInclude == "" {
54 level.Warn(logger).Log("msg", "--collector.netdev.device-whitelist is DEPRECATED and will be removed in 2.0.0, use --collector.netdev.device-include")
55 *netdevDeviceInclude = *oldNetdevDeviceInclude
56 } else {
57 return nil, errors.New("--collector.netdev.device-whitelist and --collector.netdev.device-include are mutually exclusive")
58 }
59 }
60
61 if *oldNetdevDeviceExclude != "" {
62 if *netdevDeviceExclude == "" {
63 level.Warn(logger).Log("msg", "--collector.netdev.device-blacklist is DEPRECATED and will be removed in 2.0.0, use --collector.netdev.device-exclude")
64 *netdevDeviceExclude = *oldNetdevDeviceExclude
65 } else {
66 return nil, errors.New("--collector.netdev.device-blacklist and --collector.netdev.device-exclude are mutually exclusive")
67 }
68 }
69
70 if *netdevDeviceExclude != "" && *netdevDeviceInclude != "" {
71 return nil, errors.New("device-exclude & device-include are mutually exclusive")
51 } 72 }
52 73
53 var ignorePattern *regexp.Regexp 74 var excludePattern *regexp.Regexp
54 if *netdevIgnoredDevices != "" { 75 if *netdevDeviceExclude != "" {
55 ignorePattern = regexp.MustCompile(*netdevIgnoredDevices) 76 level.Info(logger).Log("msg", "Parsed flag --collector.netdev.device-exclude", "flag", *netdevDeviceExclude)
77 excludePattern = regexp.MustCompile(*netdevDeviceExclude)
56 } 78 }
57 79
58 var acceptPattern *regexp.Regexp 80 var includePattern *regexp.Regexp
59 if *netdevAcceptDevices != "" { 81 if *netdevDeviceInclude != "" {
60 acceptPattern = regexp.MustCompile(*netdevAcceptDevices) 82 level.Info(logger).Log("msg", "Parsed Flag --collector.netdev.device-include", "flag", *netdevDeviceInclude)
83 includePattern = regexp.MustCompile(*netdevDeviceInclude)
61 } 84 }
62 85
63 return &netDevCollector{ 86 return &netDevCollector{
64 subsystem: "network", 87 subsystem: "network",
65 ignoredDevicesPattern: ignorePattern, 88 deviceExcludePattern: excludePattern,
66 acceptDevicesPattern: acceptPattern, 89 deviceIncludePattern: includePattern,
67 metricDescs: map[string]*prometheus.Desc{}, 90 metricDescs: map[string]*prometheus.Desc{},
68 logger: logger, 91 logger: logger,
69 }, nil 92 }, nil
70} 93}
71 94
72func (c *netDevCollector) Update(ch chan<- prometheus.Metric) error { 95func (c *netDevCollector) Update(ch chan<- prometheus.Metric) error {
73 netDev, err := getNetDevStats(c.ignoredDevicesPattern, c.acceptDevicesPattern, c.logger) 96 netDev, err := getNetDevStats(c.deviceExcludePattern, c.deviceIncludePattern, c.logger)
74 if err != nil { 97 if err != nil {
75 return fmt.Errorf("couldn't get netstats: %s", err) 98 return fmt.Errorf("couldn't get netstats: %s", err)
76 } 99 }
diff --git a/collector/systemd_linux.go b/collector/systemd_linux.go
index 0827069..57e9594 100644
--- a/collector/systemd_linux.go
+++ b/collector/systemd_linux.go
@@ -16,6 +16,7 @@
16package collector 16package collector
17 17
18import ( 18import (
19 "errors"
19 "fmt" 20 "fmt"
20 "math" 21 "math"
21 "regexp" 22 "regexp"
@@ -39,8 +40,10 @@ const (
39) 40)
40 41
41var ( 42var (
42 unitWhitelist = kingpin.Flag("collector.systemd.unit-whitelist", "Regexp of systemd units to whitelist. Units must both match whitelist and not match blacklist to be included.").Default(".+").String() 43 unitInclude = kingpin.Flag("collector.systemd.unit-include", "Regexp of systemd units to include. Units must both match include and not match exclude to be included.").Default(".+").String()
43 unitBlacklist = kingpin.Flag("collector.systemd.unit-blacklist", "Regexp of systemd units to blacklist. Units must both match whitelist and not match blacklist to be included.").Default(".+\\.(automount|device|mount|scope|slice)").String() 44 oldUnitInclude = kingpin.Flag("collector.systemd.unit-whitelist", "DEPRECATED: Use --collector.systemd.unit-include").Hidden().String()
45 unitExclude = kingpin.Flag("collector.systemd.unit-exclude", "Regexp of systemd units to exclude. Units must both match include and not match exclude to be included.").Default(".+\\.(automount|device|mount|scope|slice)").String()
46 oldUnitExclude = kingpin.Flag("collector.systemd.unit-blacklist", "DEPRECATED: Use collector.systemd.unit-exclude").Hidden().String()
44 systemdPrivate = kingpin.Flag("collector.systemd.private", "Establish a private, direct connection to systemd without dbus (Strongly discouraged since it requires root. For testing purposes only).").Hidden().Bool() 47 systemdPrivate = kingpin.Flag("collector.systemd.private", "Establish a private, direct connection to systemd without dbus (Strongly discouraged since it requires root. For testing purposes only).").Hidden().Bool()
45 enableTaskMetrics = kingpin.Flag("collector.systemd.enable-task-metrics", "Enables service unit tasks metrics unit_tasks_current and unit_tasks_max").Bool() 48 enableTaskMetrics = kingpin.Flag("collector.systemd.enable-task-metrics", "Enables service unit tasks metrics unit_tasks_current and unit_tasks_max").Bool()
46 enableRestartsMetrics = kingpin.Flag("collector.systemd.enable-restarts-metrics", "Enables service unit metric service_restart_total").Bool() 49 enableRestartsMetrics = kingpin.Flag("collector.systemd.enable-restarts-metrics", "Enables service unit metric service_restart_total").Bool()
@@ -61,8 +64,8 @@ type systemdCollector struct {
61 socketRefusedConnectionsDesc *prometheus.Desc 64 socketRefusedConnectionsDesc *prometheus.Desc
62 systemdVersionDesc *prometheus.Desc 65 systemdVersionDesc *prometheus.Desc
63 systemdVersion int 66 systemdVersion int
64 unitWhitelistPattern *regexp.Regexp 67 unitIncludePattern *regexp.Regexp
65 unitBlacklistPattern *regexp.Regexp 68 unitExcludePattern *regexp.Regexp
66 logger log.Logger 69 logger log.Logger
67} 70}
68 71
@@ -118,8 +121,27 @@ func NewSystemdCollector(logger log.Logger) (Collector, error) {
118 systemdVersionDesc := prometheus.NewDesc( 121 systemdVersionDesc := prometheus.NewDesc(
119 prometheus.BuildFQName(namespace, subsystem, "version"), 122 prometheus.BuildFQName(namespace, subsystem, "version"),
120 "Detected systemd version", []string{}, nil) 123 "Detected systemd version", []string{}, nil)
121 unitWhitelistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitWhitelist)) 124
122 unitBlacklistPattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitBlacklist)) 125 if *oldUnitExclude != "" {
126 if *unitExclude == "" {
127 level.Warn(logger).Log("msg", "--collector.systemd.unit-blacklist is DEPRECATED and will be removed in 2.0.0, use --collector.systemd.unit-exclude")
128 *unitExclude = *oldUnitExclude
129 } else {
130 return nil, errors.New("--collector.systemd.unit-blacklist and --collector.systemd.unit-exclude are mutually exclusive")
131 }
132 }
133 if *oldUnitInclude != "" {
134 if *unitInclude == "" {
135 level.Warn(logger).Log("msg", "--collector.systemd.unit-whitelist is DEPRECATED and will be removed in 2.0.0, use --collector.systemd.unit-include")
136 *unitInclude = *oldUnitInclude
137 } else {
138 return nil, errors.New("--collector.systemd.unit-whitelist and --collector.systemd.unit-include are mutually exclusive")
139 }
140 }
141 level.Info(logger).Log("msg", "Parsed flag --collector.systemd.unit-include", "flag", *unitInclude)
142 unitIncludePattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitInclude))
143 level.Info(logger).Log("msg", "Parsed flag --collector.systemd.unit-exclude", "flag", *unitExclude)
144 unitExcludePattern := regexp.MustCompile(fmt.Sprintf("^(?:%s)$", *unitExclude))
123 145
124 systemdVersion := getSystemdVersion(logger) 146 systemdVersion := getSystemdVersion(logger)
125 if systemdVersion < minSystemdVersionSystemState { 147 if systemdVersion < minSystemdVersionSystemState {
@@ -141,8 +163,8 @@ func NewSystemdCollector(logger log.Logger) (Collector, error) {
141 socketRefusedConnectionsDesc: socketRefusedConnectionsDesc, 163 socketRefusedConnectionsDesc: socketRefusedConnectionsDesc,
142 systemdVersionDesc: systemdVersionDesc, 164 systemdVersionDesc: systemdVersionDesc,
143 systemdVersion: systemdVersion, 165 systemdVersion: systemdVersion,
144 unitWhitelistPattern: unitWhitelistPattern, 166 unitIncludePattern: unitIncludePattern,
145 unitBlacklistPattern: unitBlacklistPattern, 167 unitExcludePattern: unitExcludePattern,
146 logger: logger, 168 logger: logger,
147 }, nil 169 }, nil
148} 170}
@@ -169,7 +191,7 @@ func (c *systemdCollector) Update(ch chan<- prometheus.Metric) error {
169 level.Debug(c.logger).Log("msg", "collectSummaryMetrics took", "duration_seconds", time.Since(begin).Seconds()) 191 level.Debug(c.logger).Log("msg", "collectSummaryMetrics took", "duration_seconds", time.Since(begin).Seconds())
170 192
171 begin = time.Now() 193 begin = time.Now()
172 units := filterUnits(allUnits, c.unitWhitelistPattern, c.unitBlacklistPattern, c.logger) 194 units := filterUnits(allUnits, c.unitIncludePattern, c.unitExcludePattern, c.logger)
173 level.Debug(c.logger).Log("msg", "filterUnits took", "duration_seconds", time.Since(begin).Seconds()) 195 level.Debug(c.logger).Log("msg", "filterUnits took", "duration_seconds", time.Since(begin).Seconds())
174 196
175 var wg sync.WaitGroup 197 var wg sync.WaitGroup
@@ -443,10 +465,10 @@ func summarizeUnits(units []unit) map[string]float64 {
443 return summarized 465 return summarized
444} 466}
445 467
446func filterUnits(units []unit, whitelistPattern, blacklistPattern *regexp.Regexp, logger log.Logger) []unit { 468func filterUnits(units []unit, includePattern, excludePattern *regexp.Regexp, logger log.Logger) []unit {
447 filtered := make([]unit, 0, len(units)) 469 filtered := make([]unit, 0, len(units))
448 for _, unit := range units { 470 for _, unit := range units {
449 if whitelistPattern.MatchString(unit.Name) && !blacklistPattern.MatchString(unit.Name) && unit.LoadState == "loaded" { 471 if includePattern.MatchString(unit.Name) && !excludePattern.MatchString(unit.Name) && unit.LoadState == "loaded" {
450 level.Debug(logger).Log("msg", "Adding unit", "unit", unit.Name) 472 level.Debug(logger).Log("msg", "Adding unit", "unit", unit.Name)
451 filtered = append(filtered, unit) 473 filtered = append(filtered, unit)
452 } else { 474 } else {
diff --git a/collector/systemd_linux_test.go b/collector/systemd_linux_test.go
index 613a1ab..93137f2 100644
--- a/collector/systemd_linux_test.go
+++ b/collector/systemd_linux_test.go
@@ -89,11 +89,11 @@ func getUnitListFixtures() [][]unit {
89 89
90func TestSystemdIgnoreFilter(t *testing.T) { 90func TestSystemdIgnoreFilter(t *testing.T) {
91 fixtures := getUnitListFixtures() 91 fixtures := getUnitListFixtures()
92 whitelistPattern := regexp.MustCompile("^foo$") 92 includePattern := regexp.MustCompile("^foo$")
93 blacklistPattern := regexp.MustCompile("^bar$") 93 excludePattern := regexp.MustCompile("^bar$")
94 filtered := filterUnits(fixtures[0], whitelistPattern, blacklistPattern, log.NewNopLogger()) 94 filtered := filterUnits(fixtures[0], includePattern, excludePattern, log.NewNopLogger())
95 for _, unit := range filtered { 95 for _, unit := range filtered {
96 if blacklistPattern.MatchString(unit.Name) || !whitelistPattern.MatchString(unit.Name) { 96 if excludePattern.MatchString(unit.Name) || !includePattern.MatchString(unit.Name) {
97 t.Error(unit.Name, "should not be in the filtered list") 97 t.Error(unit.Name, "should not be in the filtered list")
98 } 98 }
99 } 99 }
@@ -106,7 +106,7 @@ func TestSystemdIgnoreFilterDefaultKeepsAll(t *testing.T) {
106 } 106 }
107 fixtures := getUnitListFixtures() 107 fixtures := getUnitListFixtures()
108 collector := c.(*systemdCollector) 108 collector := c.(*systemdCollector)
109 filtered := filterUnits(fixtures[0], collector.unitWhitelistPattern, collector.unitBlacklistPattern, logger) 109 filtered := filterUnits(fixtures[0], collector.unitIncludePattern, collector.unitExcludePattern, logger)
110 // Adjust fixtures by 3 "not-found" units. 110 // Adjust fixtures by 3 "not-found" units.
111 if len(filtered) != len(fixtures[0])-3 { 111 if len(filtered) != len(fixtures[0])-3 {
112 t.Error("Default filters removed units") 112 t.Error("Default filters removed units")