diff --git a/cmd/pulse-agent/main.go b/cmd/pulse-agent/main.go index 302a79401..c42b97f96 100644 --- a/cmd/pulse-agent/main.go +++ b/cmd/pulse-agent/main.go @@ -306,6 +306,7 @@ func run(ctx context.Context, args []string, getenv func(string) string) error { IncludeServices: true, IncludeTasks: true, CollectDiskMetrics: false, + DiskExclude: cfg.DiskExclude, } dockerAgent, err = newDockerAgent(dockerCfg) diff --git a/internal/dockeragent/agent.go b/internal/dockeragent/agent.go index 0fdef7861..c448ddcc6 100644 --- a/internal/dockeragent/agent.go +++ b/internal/dockeragent/agent.go @@ -50,6 +50,7 @@ type Config struct { IncludeTasks bool IncludeContainers bool CollectDiskMetrics bool + DiskExclude []string // Mount points or path prefixes to exclude from disk monitoring LogLevel zerolog.Level Logger *zerolog.Logger } diff --git a/internal/dockeragent/collect.go b/internal/dockeragent/collect.go index fc3757243..a2579b953 100644 --- a/internal/dockeragent/collect.go +++ b/internal/dockeragent/collect.go @@ -91,7 +91,7 @@ func (a *Agent) buildReport(ctx context.Context) (agentsdocker.Report, error) { uptime := readSystemUptime() metricsCtx, metricsCancel := context.WithTimeout(ctx, 10*time.Second) - snapshot, err := hostmetricsCollect(metricsCtx, nil) + snapshot, err := hostmetricsCollect(metricsCtx, a.cfg.DiskExclude) metricsCancel() if err != nil { return agentsdocker.Report{}, fmt.Errorf("collect host metrics: %w", err) diff --git a/internal/monitoring/monitor.go b/internal/monitoring/monitor.go index bf2d9005e..bde7e3957 100644 --- a/internal/monitoring/monitor.go +++ b/internal/monitoring/monitor.go @@ -2187,6 +2187,11 @@ func (m *Monitor) ApplyDockerReport(report agentsdocker.Report, tokenRecord *con disks := make([]models.Disk, 0, len(report.Host.Disks)) for _, disk := range report.Host.Disks { + // Filter virtual/system filesystems (same as ApplyHostReport) to avoid + // inflated disk totals from tmpfs, overlayfs, etc. + if shouldSkip, _ := fsfilters.ShouldSkipFilesystem(disk.Type, disk.Mountpoint, uint64(disk.TotalBytes), uint64(disk.UsedBytes)); shouldSkip { + continue + } disks = append(disks, models.Disk{ Total: disk.TotalBytes, Used: disk.UsedBytes,