fix(inputs.diskio): Print warnings once, add details to messages (#15667)

This commit is contained in:
Joshua Powers 2024-07-25 13:04:42 -06:00 committed by GitHub
parent a3eda34048
commit 934b4a0879
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 7 deletions

View File

@ -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
}

View File

@ -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)
}
}
}