diff options
author | Ben Kochie <superq@gmail.com> | 2020-06-14 10:39:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-14 10:39:43 +0200 |
commit | 7790f968813563cc01264ba3f91001592e55f110 (patch) | |
tree | 8f5e39d0cdf3e13ab93525e87f76cf3107b84f2f | |
parent | 2cefe3d769b161388fe3635a7243cffaac803d43 (diff) | |
parent | 7e49b68d3a994bce083de9a7258d30ded7391c8b (diff) | |
download | prometheus_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.md | 1 | ||||
-rw-r--r-- | collector/filesystem_common.go | 3 | ||||
-rw-r--r-- | collector/netdev_common.go | 65 | ||||
-rw-r--r-- | collector/systemd_linux.go | 44 | ||||
-rw-r--r-- | collector/systemd_linux_test.go | 10 |
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. |
71 | func NewFilesystemCollector(logger log.Logger) (Collector, error) { | 72 | func 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 | ||
30 | var ( | 31 | var ( |
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 | ||
35 | type netDevCollector struct { | 38 | type 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 | ||
43 | func init() { | 46 | func 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. |
48 | func NewNetDevCollector(logger log.Logger) (Collector, error) { | 51 | func 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 | ||
72 | func (c *netDevCollector) Update(ch chan<- prometheus.Metric) error { | 95 | func (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 @@ | |||
16 | package collector | 16 | package collector |
17 | 17 | ||
18 | import ( | 18 | import ( |
19 | "errors" | ||
19 | "fmt" | 20 | "fmt" |
20 | "math" | 21 | "math" |
21 | "regexp" | 22 | "regexp" |
@@ -39,8 +40,10 @@ const ( | |||
39 | ) | 40 | ) |
40 | 41 | ||
41 | var ( | 42 | var ( |
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 | ||
446 | func filterUnits(units []unit, whitelistPattern, blacklistPattern *regexp.Regexp, logger log.Logger) []unit { | 468 | func 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 | ||
90 | func TestSystemdIgnoreFilter(t *testing.T) { | 90 | func 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") |