From 3b3ef7357fa5b4a16e0c367de488ceeab999d1fa Mon Sep 17 00:00:00 2001 From: Ben Kochie Date: Wed, 3 Mar 2021 08:57:16 +0100 Subject: [PATCH] Silence missing netclass errors * Handle no such file and permission denied errors. * Reduce excessive error wrapping. Fixes: https://github.com/prometheus/node_exporter/issues/1840 Signed-off-by: Ben Kochie --- CHANGELOG.md | 1 + collector/netclass_linux.go | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bc76489..dbfc9fa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ * [BUGFIX] Handle errors from disabled PSI subsystem #1983 * [BUGFIX] Sanitize strings from /sys/class/power_supply #1984 +* [BUGFIX] Silence missing netclass errors #1986 ## 1.1.1 / 2021-02-12 diff --git a/collector/netclass_linux.go b/collector/netclass_linux.go index 0fde2191..515f4d74 100644 --- a/collector/netclass_linux.go +++ b/collector/netclass_linux.go @@ -17,10 +17,13 @@ package collector import ( + "errors" "fmt" + "os" "regexp" "github.com/go-kit/kit/log" + "github.com/go-kit/kit/log/level" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/procfs/sysfs" "gopkg.in/alecthomas/kingpin.v2" @@ -61,6 +64,10 @@ func NewNetClassCollector(logger log.Logger) (Collector, error) { func (c *netClassCollector) Update(ch chan<- prometheus.Metric) error { netClass, err := c.getNetClassInfo() if err != nil { + if errors.Is(err, os.ErrNotExist) || errors.Is(err, os.ErrPermission) { + level.Debug(c.logger).Log("msg", "Could not read netclass file", "err", err) + return ErrNoData + } return fmt.Errorf("could not get net class info: %w", err) } for _, ifaceInfo := range netClass { @@ -173,9 +180,8 @@ func pushMetric(ch chan<- prometheus.Metric, subsystem string, name string, valu func (c *netClassCollector) getNetClassInfo() (sysfs.NetClass, error) { netClass, err := c.fs.NetClass() - if err != nil { - return netClass, fmt.Errorf("error obtaining net class info: %w", err) + return netClass, err } for device := range netClass {