@@ -67,12 +67,26 @@ var (
67
67
"Regexp of filesystem types to exclude for filesystem collector. (mutually exclusive to fs-types-exclude)" ,
68
68
).String ()
69
69
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" }
71
84
)
72
85
73
86
type filesystemCollector struct {
74
87
mountPointFilter deviceFilter
75
88
fsTypeFilter deviceFilter
89
+ fsUUIDFilter deviceFilter
76
90
sizeDesc , freeDesc , availDesc * prometheus.Desc
77
91
filesDesc , filesFreeDesc * prometheus.Desc
78
92
purgeableDesc * prometheus.Desc
@@ -82,7 +96,7 @@ type filesystemCollector struct {
82
96
}
83
97
84
98
type filesystemLabels struct {
85
- device , mountPoint , fsType , mountOptions , superOptions , deviceError , major , minor string
99
+ device , mountPoint , fsType , fsUUID , mountOptions , superOptions , deviceError , major , minor string
86
100
}
87
101
88
102
type filesystemStats struct {
@@ -166,9 +180,15 @@ func NewFilesystemCollector(logger *slog.Logger) (Collector, error) {
166
180
return nil , fmt .Errorf ("unable to parse fs types filter flags: %w" , err )
167
181
}
168
182
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
+
169
188
return & filesystemCollector {
170
189
mountPointFilter : mountPointFilter ,
171
190
fsTypeFilter : fsTypeFilter ,
191
+ fsUUIDFilter : fsUUIDFilter ,
172
192
sizeDesc : sizeDesc ,
173
193
freeDesc : freeDesc ,
174
194
availDesc : availDesc ,
@@ -197,11 +217,11 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error {
197
217
198
218
ch <- prometheus .MustNewConstMetric (
199
219
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 ,
201
221
)
202
222
ch <- prometheus .MustNewConstMetric (
203
223
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 ,
205
225
)
206
226
207
227
if s .deviceError > 0 {
@@ -210,23 +230,23 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error {
210
230
211
231
ch <- prometheus .MustNewConstMetric (
212
232
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 ,
214
234
)
215
235
ch <- prometheus .MustNewConstMetric (
216
236
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 ,
218
238
)
219
239
ch <- prometheus .MustNewConstMetric (
220
240
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 ,
222
242
)
223
243
ch <- prometheus .MustNewConstMetric (
224
244
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 ,
226
246
)
227
247
ch <- prometheus .MustNewConstMetric (
228
248
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 ,
230
250
)
231
251
ch <- prometheus .MustNewConstMetric (
232
252
c .mountInfoDesc , prometheus .GaugeValue ,
@@ -235,7 +255,7 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error {
235
255
if s .purgeable >= 0 {
236
256
ch <- prometheus .MustNewConstMetric (
237
257
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 ,
239
259
)
240
260
}
241
261
}
@@ -299,3 +319,22 @@ func newFSTypeFilter(logger *slog.Logger) (deviceFilter, error) {
299
319
300
320
return newDeviceFilter (* fsTypesExclude , * fsTypesInclude ), nil
301
321
}
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