diff --git a/metricbeat/module/system/process/process.go b/metricbeat/module/system/process/process.go index 01c8480656df..f84c0b6027a0 100644 --- a/metricbeat/module/system/process/process.go +++ b/metricbeat/module/system/process/process.go @@ -57,7 +57,10 @@ func New(base mb.BaseMetricSet) (mb.MetricSet, error) { return nil, err } - sys := base.Module().(resolve.Resolver) + sys, ok := base.Module().(resolve.Resolver) + if !ok { + return nil, fmt.Errorf("resolver cannot be cast from the module") + } enableCgroups := false if runtime.GOOS == "linux" { if config.Cgroups == nil || *config.Cgroups { @@ -131,14 +134,17 @@ func (m *MetricSet) Fetch(r mb.ReporterV2) error { return err } else { proc, root, err := m.stats.GetOneRootEvent(m.setpid) - if err != nil { + if err != nil && !errors.Is(err, process.NonFatalErr{}) { + // return only if the error is fatal in nature return fmt.Errorf("error fetching pid %d: %w", m.setpid, err) + } else if (err != nil && errors.Is(err, process.NonFatalErr{})) { + err = mb.PartialMetricsError{Err: err} } + // if error is non-fatal, emit partial metrics. r.Event(mb.Event{ MetricSetFields: proc, RootFields: root, }) + return err } - - return nil }