From 934b4a08793c34f2b4146edd90a97438eada8bf1 Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Thu, 25 Jul 2024 13:04:42 -0600 Subject: [PATCH] fix(inputs.diskio): Print warnings once, add details to messages (#15667) --- plugins/inputs/diskio/diskio.go | 21 ++++++++++++++++----- plugins/inputs/diskio/diskio_linux.go | 4 ++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/plugins/inputs/diskio/diskio.go b/plugins/inputs/diskio/diskio.go index 974cc82d1..009a0d39e 100644 --- a/plugins/inputs/diskio/diskio.go +++ b/plugins/inputs/diskio/diskio.go @@ -35,6 +35,8 @@ type DiskIO struct { ps system.PS infoCache map[string]diskInfoCache deviceFilter filter.Filter + warnDiskName map[string]bool + warnDiskTags map[string]bool } func (*DiskIO) SampleConfig() string { @@ -53,6 +55,8 @@ func (d *DiskIO) Init() error { } d.infoCache = make(map[string]diskInfoCache) + d.warnDiskName = make(map[string]bool) + d.warnDiskTags = make(map[string]bool) return nil } @@ -133,13 +137,17 @@ func (d *DiskIO) diskName(devName string) (string, []string) { for i, devLink := range devLinks { devLinks[i] = strings.TrimPrefix(devLink, "/dev/") } - - if len(d.NameTemplates) == 0 { + // Return error after attempting to process some of the devlinks. + // These could exist if we got further along the diskInfo call. + if err != nil { + if ok := d.warnDiskName[devName]; !ok { + d.warnDiskName[devName] = true + d.Log.Warnf("Unable to gather disk name for %q: %s", devName, err) + } return devName, devLinks } - if err != nil { - d.Log.Warnf("Error gathering disk info: %s", err) + if len(d.NameTemplates) == 0 { return devName, devLinks } @@ -172,7 +180,10 @@ func (d *DiskIO) diskTags(devName string) map[string]string { di, err := d.diskInfo(devName) if err != nil { - d.Log.Warnf("Error gathering disk info: %s", err) + if ok := d.warnDiskTags[devName]; !ok { + d.warnDiskTags[devName] = true + d.Log.Warnf("Unable to gather disk tags for %q: %s", devName, err) + } return nil } diff --git a/plugins/inputs/diskio/diskio_linux.go b/plugins/inputs/diskio/diskio_linux.go index 6e6d4a37c..1c0db6146 100644 --- a/plugins/inputs/diskio/diskio_linux.go +++ b/plugins/inputs/diskio/diskio_linux.go @@ -25,7 +25,7 @@ func (d *DiskIO) diskInfo(devName string) (map[string]string, error) { path := "/dev/" + devName var stat unix.Stat_t if err := unix.Stat(path, &stat); err != nil { - return nil, err + return nil, fmt.Errorf("error reading %s: %w", path, err) } // Check if we already got a cached and valid entry @@ -49,7 +49,7 @@ func (d *DiskIO) diskInfo(devName string) (map[string]string, error) { udevDataPath = "/dev/.udev/db/block:" + devName if _, err := os.Stat(udevDataPath); err != nil { // Giving up, cannot retrieve disk info - return nil, err + return nil, fmt.Errorf("error reading %s: %w", udevDataPath, err) } } }