Squelch logspam when unable to get disk usage stats

To reproduce logspam:

```
$ docker plugin install --grant-all-permissions vieux/sshfs
$ nomad agent -dev
...
2017/08/25 17:09:03.282868 [WARN] client: error fetching host disk usage stats for /var/lib/docker/plugins/a8b4a69b07e5180f828d19e1e9e102ccc0e26f9c9939eaef85357260c30b20a7/rootfs/mnt/volumes: permission denied
... repeats every collection period ...
```
This commit is contained in:
Michael Schurter
2017-08-28 12:04:32 -07:00
parent 85a1899dfa
commit 7a84cbe02a

View File

@@ -70,6 +70,10 @@ type HostStatsCollector struct {
hostStats *HostStats
hostStatsLock sync.RWMutex
allocDir string
// badParts is a set of partitions whose usage cannot be read; used to
// squelch logspam.
badParts map[string]struct{}
}
// NewHostStatsCollector returns a HostStatsCollector. The allocDir is passed in
@@ -83,6 +87,7 @@ func NewHostStatsCollector(logger *log.Logger, allocDir string) *HostStatsCollec
numCores: numCores,
logger: logger,
allocDir: allocDir,
badParts: make(map[string]struct{}),
}
return collector
}
@@ -134,9 +139,17 @@ func (h *HostStatsCollector) Collect() error {
for _, partition := range partitions {
usage, err := disk.Usage(partition.Mountpoint)
if err != nil {
if _, ok := h.badParts[partition.Mountpoint]; ok {
// already known bad, don't log again
continue
}
h.badParts[partition.Mountpoint] = struct{}{}
h.logger.Printf("[WARN] client: error fetching host disk usage stats for %v: %v", partition.Mountpoint, err)
continue
}
delete(h.badParts, partition.Mountpoint)
ds := h.toDiskStats(usage, &partition)
diskStats = append(diskStats, ds)
}