1717package collector
1818
1919import (
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.
2842type ext4Collector struct {
29- fs ext4.FS
30- logger * slog.Logger
43+ deviceFilter deviceFilter
44+ fs ext4.FS
45+ logger * slog.Logger
3146}
3247
3348func 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.
3869func 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