From a70b5e34c3c838e7b6cc63bbd06a4b2742946d85 Mon Sep 17 00:00:00 2001 From: Pamela Mei i540369 Date: Sun, 11 Feb 2024 10:42:51 +0800 Subject: [PATCH] MOD: surface filesystem device error #2918 Signed-off-by: Pamela Mei i540369 --- collector/filesystem_common.go | 18 +++++++++--------- collector/filesystem_linux.go | 3 +++ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/collector/filesystem_common.go b/collector/filesystem_common.go index f5dde59ab7..7bbcf58859 100644 --- a/collector/filesystem_common.go +++ b/collector/filesystem_common.go @@ -60,7 +60,7 @@ var ( "Regexp of filesystem types to ignore for filesystem collector.", ).Hidden().String() - filesystemLabelNames = []string{"device", "mountpoint", "fstype"} + filesystemLabelNames = []string{"device", "mountpoint", "fstype", "device_error"} ) type filesystemCollector struct { @@ -73,7 +73,7 @@ type filesystemCollector struct { } type filesystemLabels struct { - device, mountPoint, fsType, options string + device, mountPoint, fsType, options, device_error string } type filesystemStats struct { @@ -184,11 +184,11 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error { ch <- prometheus.MustNewConstMetric( c.deviceErrorDesc, prometheus.GaugeValue, - s.deviceError, s.labels.device, s.labels.mountPoint, s.labels.fsType, + s.deviceError, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.device_error, ) ch <- prometheus.MustNewConstMetric( c.roDesc, prometheus.GaugeValue, - s.ro, s.labels.device, s.labels.mountPoint, s.labels.fsType, + s.ro, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.device_error, ) if s.deviceError > 0 { @@ -197,23 +197,23 @@ func (c *filesystemCollector) Update(ch chan<- prometheus.Metric) error { ch <- prometheus.MustNewConstMetric( c.sizeDesc, prometheus.GaugeValue, - s.size, s.labels.device, s.labels.mountPoint, s.labels.fsType, + s.size, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.device_error, ) ch <- prometheus.MustNewConstMetric( c.freeDesc, prometheus.GaugeValue, - s.free, s.labels.device, s.labels.mountPoint, s.labels.fsType, + s.free, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.device_error, ) ch <- prometheus.MustNewConstMetric( c.availDesc, prometheus.GaugeValue, - s.avail, s.labels.device, s.labels.mountPoint, s.labels.fsType, + s.avail, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.device_error, ) ch <- prometheus.MustNewConstMetric( c.filesDesc, prometheus.GaugeValue, - s.files, s.labels.device, s.labels.mountPoint, s.labels.fsType, + s.files, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.device_error, ) ch <- prometheus.MustNewConstMetric( c.filesFreeDesc, prometheus.GaugeValue, - s.filesFree, s.labels.device, s.labels.mountPoint, s.labels.fsType, + s.filesFree, s.labels.device, s.labels.mountPoint, s.labels.fsType, s.labels.device_error, ) } return nil diff --git a/collector/filesystem_linux.go b/collector/filesystem_linux.go index 6e7623e203..d9d5c2bdc4 100644 --- a/collector/filesystem_linux.go +++ b/collector/filesystem_linux.go @@ -85,6 +85,7 @@ func (c *filesystemCollector) GetStats() ([]filesystemStats, error) { stuckMountsMtx.Lock() if _, ok := stuckMounts[labels.mountPoint]; ok { + labels.device_error = "mountpoint timeout" stats = append(stats, filesystemStats{ labels: labels, deviceError: 1, @@ -133,6 +134,7 @@ func (c *filesystemCollector) processStat(labels filesystemLabels) filesystemSta stuckMountsMtx.Unlock() if err != nil { + labels.device_error = err.Error() level.Debug(c.logger).Log("msg", "Error on statfs() system call", "rootfs", rootfsFilePath(labels.mountPoint), "err", err) return filesystemStats{ labels: labels, @@ -211,6 +213,7 @@ func parseFilesystemLabels(r io.Reader) ([]filesystemLabels, error) { mountPoint: rootfsStripPrefix(parts[1]), fsType: parts[2], options: parts[3], + device_error: "", }) }