Skip to content

Commit ec9f168

Browse files
Adding allowed device flag for diskIo Collector
Signed-off-by: Rushikesh Lenekar <[email protected]>
1 parent e3a18fd commit ec9f168

12 files changed

+52
-32
lines changed

collector/arp_linux.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var (
3434
)
3535

3636
type arpCollector struct {
37-
deviceFilter netDevFilter
37+
deviceFilter devFilter
3838
entries *prometheus.Desc
3939
logger log.Logger
4040
}
@@ -46,7 +46,7 @@ func init() {
4646
// NewARPCollector returns a new Collector exposing ARP stats.
4747
func NewARPCollector(logger log.Logger) (Collector, error) {
4848
return &arpCollector{
49-
deviceFilter: newNetDevFilter(*arpDeviceExclude, *arpDeviceInclude),
49+
deviceFilter: newdevFilter(*arpDeviceExclude, *arpDeviceInclude),
5050
entries: prometheus.NewDesc(
5151
prometheus.BuildFQName(namespace, "arp", "entries"),
5252
"ARP entries by device",

collector/diskstats_linux.go

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
package collector
1818

1919
import (
20+
"errors"
2021
"fmt"
21-
"regexp"
22-
2322
"github.com/go-kit/log"
2423
"github.com/go-kit/log/level"
2524
"github.com/prometheus/client_golang/prometheus"
@@ -32,7 +31,9 @@ const (
3231
)
3332

3433
var (
35-
ignoredDevices = kingpin.Flag("collector.diskstats.ignored-devices", "Regexp of devices to ignore for diskstats.").Default("^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$").String()
34+
diskstatsDeviceExclude = kingpin.Flag("collector.diskstats.device-exclude", "Regexp of diskstats devices to exclude (mutually exclusive to device-include).").String()
35+
oldDiskstatsDeviceExclude = kingpin.Flag("collector.diskstats.ignored-devices", "DEPRECATED: Use collector.diskstats.device-exclude").Default("^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$").Hidden().String()
36+
diskstatsDeviceInclude = kingpin.Flag("collector.diskstats.device-include", "Regexp of diskstats devices to include (mutually exclusive to device-exclude).").String()
3637
)
3738

3839
type typedFactorDesc struct {
@@ -45,11 +46,11 @@ func (d *typedFactorDesc) mustNewConstMetric(value float64, labels ...string) pr
4546
}
4647

4748
type diskstatsCollector struct {
48-
ignoredDevicesPattern *regexp.Regexp
49-
fs blockdevice.FS
50-
infoDesc typedFactorDesc
51-
descs []typedFactorDesc
52-
logger log.Logger
49+
deviceFilter devFilter
50+
fs blockdevice.FS
51+
infoDesc typedFactorDesc
52+
descs []typedFactorDesc
53+
logger log.Logger
5354
}
5455

5556
func init() {
@@ -64,10 +65,30 @@ func NewDiskstatsCollector(logger log.Logger) (Collector, error) {
6465
if err != nil {
6566
return nil, fmt.Errorf("failed to open sysfs: %w", err)
6667
}
68+
if *oldDiskstatsDeviceExclude != "" {
69+
if *diskstatsDeviceExclude == "" {
70+
level.Warn(logger).Log("msg", "--collector.netdev.ignored-devices is DEPRECATED and will be removed in 2.0.0, use --collector.diskstats.device-exclude")
71+
*diskstatsDeviceExclude = *oldDiskstatsDeviceExclude
72+
} else {
73+
return nil, errors.New("--collector.diskstats.ignored-devices and --collector.diskstats.device-exclude are mutually exclusive")
74+
}
75+
}
76+
77+
if *diskstatsDeviceExclude != "" && *diskstatsDeviceInclude != "" {
78+
return nil, errors.New("device-exclude & device-include are mutually exclusive")
79+
}
80+
81+
if *diskstatsDeviceExclude != "" {
82+
level.Info(logger).Log("msg", "Parsed flag --collector.diskstats.device-exclude", "flag", *diskstatsDeviceExclude)
83+
}
84+
85+
if *diskstatsDeviceInclude != "" {
86+
level.Info(logger).Log("msg", "Parsed Flag --collector.diskstats.device-include", "flag", *diskstatsDeviceInclude)
87+
}
6788

6889
return &diskstatsCollector{
69-
ignoredDevicesPattern: regexp.MustCompile(*ignoredDevices),
70-
fs: fs,
90+
deviceFilter: newdevFilter(*diskstatsDeviceExclude, *diskstatsDeviceInclude),
91+
fs: fs,
7192
infoDesc: typedFactorDesc{
7293
desc: prometheus.NewDesc(prometheus.BuildFQName(namespace, diskSubsystem, "info"),
7394
"Info of /sys/block/<block_device>.",
@@ -190,11 +211,9 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
190211

191212
for _, stats := range diskStats {
192213
dev := stats.DeviceName
193-
if c.ignoredDevicesPattern.MatchString(dev) {
194-
level.Debug(c.logger).Log("msg", "Ignoring device", "device", dev, "pattern", c.ignoredDevicesPattern)
214+
if c.deviceFilter.ignored(dev) {
195215
continue
196216
}
197-
198217
diskSectorSize := 512.0
199218
blockQueue, err := c.fs.SysBlockDeviceQueueStats(dev)
200219
if err != nil {
@@ -231,6 +250,7 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
231250
}
232251
ch <- c.descs[i].mustNewConstMetric(val, dev)
233252
}
253+
234254
}
235255
return nil
236256
}

collector/ethtool_linux.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ type ethtoolCollector struct {
7474
fs sysfs.FS
7575
entries map[string]*prometheus.Desc
7676
ethtool Ethtool
77-
deviceFilter netDevFilter
77+
deviceFilter devFilter
7878
infoDesc *prometheus.Desc
7979
metricsPattern *regexp.Regexp
8080
logger log.Logger
@@ -98,7 +98,7 @@ func makeEthtoolCollector(logger log.Logger) (*ethtoolCollector, error) {
9898
return &ethtoolCollector{
9999
fs: fs,
100100
ethtool: &ethtoolLibrary{e},
101-
deviceFilter: newNetDevFilter(*ethtoolDeviceExclude, *ethtoolDeviceInclude),
101+
deviceFilter: newdevFilter(*ethtoolDeviceExclude, *ethtoolDeviceInclude),
102102
metricsPattern: regexp.MustCompile(*ethtoolIncludedMetrics),
103103
logger: logger,
104104
entries: map[string]*prometheus.Desc{

collector/netdev_bsd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434
*/
3535
import "C"
3636

37-
func getNetDevStats(filter *netDevFilter, logger log.Logger) (netDevStats, error) {
37+
func getNetDevStats(filter *devFilter, logger log.Logger) (netDevStats, error) {
3838
netDev := netDevStats{}
3939

4040
var ifap, ifa *C.struct_ifaddrs

collector/netdev_common.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ var (
3939

4040
type netDevCollector struct {
4141
subsystem string
42-
deviceFilter netDevFilter
42+
deviceFilter devFilter
4343
metricDescs map[string]*prometheus.Desc
4444
logger log.Logger
4545
}
@@ -84,7 +84,7 @@ func NewNetDevCollector(logger log.Logger) (Collector, error) {
8484

8585
return &netDevCollector{
8686
subsystem: "network",
87-
deviceFilter: newNetDevFilter(*netdevDeviceExclude, *netdevDeviceInclude),
87+
deviceFilter: newdevFilter(*netdevDeviceExclude, *netdevDeviceInclude),
8888
metricDescs: map[string]*prometheus.Desc{},
8989
logger: logger,
9090
}, nil

collector/netdev_darwin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727
"golang.org/x/sys/unix"
2828
)
2929

30-
func getNetDevStats(filter *netDevFilter, logger log.Logger) (netDevStats, error) {
30+
func getNetDevStats(filter *devFilter, logger log.Logger) (netDevStats, error) {
3131
netDev := netDevStats{}
3232

3333
ifs, err := net.Interfaces()

collector/netdev_filter.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ import (
1717
"regexp"
1818
)
1919

20-
type netDevFilter struct {
20+
type devFilter struct {
2121
ignorePattern *regexp.Regexp
2222
acceptPattern *regexp.Regexp
2323
}
2424

25-
func newNetDevFilter(ignoredPattern, acceptPattern string) (f netDevFilter) {
25+
func newdevFilter(ignoredPattern, acceptPattern string) (f devFilter) {
2626
if ignoredPattern != "" {
2727
f.ignorePattern = regexp.MustCompile(ignoredPattern)
2828
}
@@ -35,7 +35,7 @@ func newNetDevFilter(ignoredPattern, acceptPattern string) (f netDevFilter) {
3535
}
3636

3737
// ignores returns whether the device should be ignored
38-
func (f *netDevFilter) ignored(name string) bool {
38+
func (f *devFilter) ignored(name string) bool {
3939
return ((f.ignorePattern != nil && f.ignorePattern.MatchString(name)) ||
4040
(f.acceptPattern != nil && !f.acceptPattern.MatchString(name)))
4141
}

collector/netdev_filter_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
"testing"
1818
)
1919

20-
func TestNetDevFilter(t *testing.T) {
20+
func TestdevFilter(t *testing.T) {
2121
tests := []struct {
2222
ignore string
2323
accept string
@@ -33,7 +33,7 @@ func TestNetDevFilter(t *testing.T) {
3333
}
3434

3535
for _, test := range tests {
36-
filter := newNetDevFilter(test.ignore, test.accept)
36+
filter := newdevFilter(test.ignore, test.accept)
3737
result := filter.ignored(test.name)
3838

3939
if result != test.expectedResult {

collector/netdev_linux.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var (
3434
procNetDevFieldSep = regexp.MustCompile(` +`)
3535
)
3636

37-
func getNetDevStats(filter *netDevFilter, logger log.Logger) (netDevStats, error) {
37+
func getNetDevStats(filter *devFilter, logger log.Logger) (netDevStats, error) {
3838
file, err := os.Open(procFilePath("net/dev"))
3939
if err != nil {
4040
return nil, err
@@ -44,7 +44,7 @@ func getNetDevStats(filter *netDevFilter, logger log.Logger) (netDevStats, error
4444
return parseNetDevStats(file, filter, logger)
4545
}
4646

47-
func parseNetDevStats(r io.Reader, filter *netDevFilter, logger log.Logger) (netDevStats, error) {
47+
func parseNetDevStats(r io.Reader, filter *devFilter, logger log.Logger) (netDevStats, error) {
4848
scanner := bufio.NewScanner(r)
4949
scanner.Scan() // skip first header
5050
scanner.Scan()

collector/netdev_linux_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestNetDevStatsIgnore(t *testing.T) {
2727
}
2828
defer file.Close()
2929

30-
filter := newNetDevFilter("^veth", "")
30+
filter := newdevFilter("^veth", "")
3131

3232
netStats, err := parseNetDevStats(file, &filter, log.NewNopLogger())
3333
if err != nil {
@@ -70,7 +70,7 @@ func TestNetDevStatsAccept(t *testing.T) {
7070
}
7171
defer file.Close()
7272

73-
filter := newNetDevFilter("", "^💩0$")
73+
filter := newdevFilter("", "^💩0$")
7474
netStats, err := parseNetDevStats(file, &filter, log.NewNopLogger())
7575
if err != nil {
7676
t.Fatal(err)

0 commit comments

Comments
 (0)