@@ -67,12 +67,26 @@ var (
6767 "Regexp of filesystem types to exclude for filesystem collector. (mutually exclusive to fs-types-exclude)" ,
6868 ).String ()
6969
70- filesystemLabelNames = []string {"device" , "mountpoint" , "fstype" , "device_error" }
70+ fsUUIDsExcludeSet bool
71+ fsUUIDsExclude = kingpin .Flag (
72+ "collector.filesystem.fs-uuids-exclude" ,
73+ "Regexp of filesystem UUIDs to exclude for filesystem collector. (mutually exclusive to fs-uuids-include)" ,
74+ ).Default ("" ).PreAction (func (c * kingpin.ParseContext ) error {
75+ fsUUIDsExcludeSet = true
76+ return nil
77+ }).String ()
78+ fsUUIDsInclude = kingpin .Flag (
79+ "collector.filesystem.fs-uuids-include" ,
80+ "Regexp of filesystem UUIDs to include for filesystem collector. (mutually exclusive to fs-uuids-exclude)" ,
81+ ).String ()
82+
83+ filesystemLabelNames = []string {"device" , "mountpoint" , "fstype" , "fsuuid" , "device_error" }
7184)
7285
7386type filesystemCollector struct {
7487 mountPointFilter deviceFilter
7588 fsTypeFilter deviceFilter
89+ fsUUIDFilter deviceFilter
7690 sizeDesc , freeDesc , availDesc * prometheus.Desc
7791 filesDesc , filesFreeDesc * prometheus.Desc
7892 purgeableDesc * prometheus.Desc
@@ -82,7 +96,7 @@ type filesystemCollector struct {
8296}
8397
8498type filesystemLabels struct {
85- device , mountPoint , fsType , options , deviceError , major , minor string
99+ device , mountPoint , fsType , fsUUID , options , deviceError , major , minor string
86100}
87101
88102type filesystemStats struct {
@@ -166,9 +180,15 @@ func NewFilesystemCollector(logger *slog.Logger) (Collector, error) {
166180 return nil , fmt .Errorf ("unable to parse fs types filter flags: %w" , err )
167181 }
168182
183+ fsUUIDFilter , err := newFSUUIDFilter (logger )
184+ if err != nil {
185+ return nil , fmt .Errorf ("unable to parse fs UUIDs filter flags: %w" , err )
186+ }
187+
169188 return & filesystemCollector {
170189 mountPointFilter : mountPointFilter ,
171190 fsTypeFilter : fsTypeFilter ,
191+ fsUUIDFilter : fsUUIDFilter ,
172192 sizeDesc : sizeDesc ,
173193 freeDesc : freeDesc ,
174194 availDesc : availDesc ,
@@ -197,11 +217,11 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error {
197217
198218 ch <- prometheus .MustNewConstMetric (
199219 c .deviceErrorDesc , prometheus .GaugeValue ,
200- s .deviceError , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
220+ s .deviceError , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
201221 )
202222 ch <- prometheus .MustNewConstMetric (
203223 c .roDesc , prometheus .GaugeValue ,
204- s .ro , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
224+ s .ro , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
205225 )
206226
207227 if s .deviceError > 0 {
@@ -210,23 +230,23 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error {
210230
211231 ch <- prometheus .MustNewConstMetric (
212232 c .sizeDesc , prometheus .GaugeValue ,
213- s .size , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
233+ s .size , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
214234 )
215235 ch <- prometheus .MustNewConstMetric (
216236 c .freeDesc , prometheus .GaugeValue ,
217- s .free , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
237+ s .free , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
218238 )
219239 ch <- prometheus .MustNewConstMetric (
220240 c .availDesc , prometheus .GaugeValue ,
221- s .avail , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
241+ s .avail , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
222242 )
223243 ch <- prometheus .MustNewConstMetric (
224244 c .filesDesc , prometheus .GaugeValue ,
225- s .files , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
245+ s .files , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
226246 )
227247 ch <- prometheus .MustNewConstMetric (
228248 c .filesFreeDesc , prometheus .GaugeValue ,
229- s .filesFree , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
249+ s .filesFree , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
230250 )
231251 ch <- prometheus .MustNewConstMetric (
232252 c .mountInfoDesc , prometheus .GaugeValue ,
@@ -235,7 +255,7 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error {
235255 if s .purgeable >= 0 {
236256 ch <- prometheus .MustNewConstMetric (
237257 c .purgeableDesc , prometheus .GaugeValue ,
238- s .purgeable , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .deviceError ,
258+ s .purgeable , s .labels .device , s .labels .mountPoint , s .labels .fsType , s .labels .fsUUID , s . labels . deviceError ,
239259 )
240260 }
241261 }
@@ -299,3 +319,22 @@ func newFSTypeFilter(logger *slog.Logger) (deviceFilter, error) {
299319
300320 return newDeviceFilter (* fsTypesExclude , * fsTypesInclude ), nil
301321}
322+
323+ func newFSUUIDFilter (logger * slog.Logger ) (deviceFilter , error ) {
324+ if * fsUUIDsInclude != "" && ! fsUUIDsExcludeSet {
325+ logger .Debug ("fs-uuids-exclude flag not set when fs-uuids-include flag is set, assuming include is desired" )
326+ * fsUUIDsExclude = ""
327+ }
328+ if * fsUUIDsExclude != "" && * fsUUIDsInclude != "" {
329+ return deviceFilter {}, errors .New ("--collector.filesystem.fs-uuids-exclude and --collector.filesystem.fs-uuids-include are mutually exclusive" )
330+ }
331+
332+ if * fsUUIDsExclude != "" {
333+ logger .Info ("Parsed flag --collector.filesystem.fs-uuids-exclude" , "flag" , * fsUUIDsExclude )
334+ }
335+ if * fsUUIDsInclude != "" {
336+ logger .Info ("Parsed flag --collector.filesystem.fs-uuids-include" , "flag" , * fsUUIDsInclude )
337+ }
338+
339+ return newDeviceFilter (* fsUUIDsExclude , * fsUUIDsInclude ), nil
340+ }
0 commit comments