Skip to content

Commit 7e8f190

Browse files
committed
Add device filters flags for ext4
1 parent 04d215e commit 7e8f190

2 files changed

Lines changed: 45 additions & 5 deletions

File tree

collector/diskstats_linux.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error {
390390
ch <- c.ioErrDesc.mustNewConstMetric(float64(ioDeviceStats.IOErrCount), dev)
391391
ch <- c.ioDoneDesc.mustNewConstMetric(float64(ioDeviceStats.IODoneCount), dev)
392392
} else if !os.IsNotExist(ioErr) {
393-
c.logger.Info("Failed to get block device io stats", "device", dev, "err", ioErr)
393+
c.logger.Debug("Failed to get block device io stats", "device", dev, "err", ioErr)
394394
}
395395

396396
}

collector/ext4_linux.go

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,70 @@
1717
package collector
1818

1919
import (
20+
"errors"
2021
"fmt"
2122
"log/slog"
2223

24+
"github.com/alecthomas/kingpin/v2"
2325
"github.com/prometheus/client_golang/prometheus"
2426
"github.com/prometheus/procfs/ext4"
2527
)
2628

29+
var (
30+
ext4DeviceExclude = kingpin.Flag(
31+
"collector.ext4.device-exclude",
32+
"Regexp of ext4 devices to exclude (mutually exclusive to device-include).",
33+
).String()
34+
35+
ext4DeviceInclude = kingpin.Flag(
36+
"collector.ext4.device-include",
37+
"Regexp of ext4 devices to include (mutually exclusive to device-exclude).",
38+
).String()
39+
)
40+
2741
// An ext4Collector is a Collector which gathers metrics from ext4 filesystems.
2842
type ext4Collector struct {
29-
fs ext4.FS
30-
logger *slog.Logger
43+
deviceFilter deviceFilter
44+
fs ext4.FS
45+
logger *slog.Logger
3146
}
3247

3348
func init() {
3449
registerCollector("ext4", defaultEnabled, NewExt4Collector)
3550
}
3651

52+
func newExt4DeviceFilter(logger *slog.Logger) (deviceFilter, error) {
53+
if *ext4DeviceExclude != "" && *ext4DeviceInclude != "" {
54+
return deviceFilter{}, errors.New("device-exclude & device-include are mutually exclusive")
55+
}
56+
57+
if *ext4DeviceExclude != "" {
58+
logger.Info("Parsed flag --collector.ext4.device-exclude", "flag", *ext4DeviceExclude)
59+
}
60+
61+
if *ext4DeviceInclude != "" {
62+
logger.Info("Parsed Flag --collector.ext4.device-include", "flag", *ext4DeviceInclude)
63+
}
64+
65+
return newDeviceFilter(*ext4DeviceExclude, *ext4DeviceInclude), nil
66+
}
67+
3768
// NewExt4Collector returns a new Collector exposing ext4 statistics.
3869
func NewExt4Collector(logger *slog.Logger) (Collector, error) {
70+
ext4DeviceFilter, err := newExt4DeviceFilter(logger)
71+
if err != nil {
72+
return nil, fmt.Errorf("failed to parse device filter flags: %w", err)
73+
}
74+
3975
fs, err := ext4.NewFS(*procPath, *sysPath)
4076
if err != nil {
4177
return nil, fmt.Errorf("failed to open sysfs: %w", err)
4278
}
4379

4480
return &ext4Collector{
45-
fs: fs,
46-
logger: logger,
81+
deviceFilter: ext4DeviceFilter,
82+
fs: fs,
83+
logger: logger,
4784
}, nil
4885
}
4986

@@ -55,6 +92,9 @@ func (c *ext4Collector) Update(ch chan<- prometheus.Metric) error {
5592
}
5693

5794
for _, s := range stats {
95+
if c.deviceFilter.ignored(s.Name) {
96+
continue
97+
}
5898
c.updateExt4Stats(ch, s)
5999
}
60100

0 commit comments

Comments
 (0)