From 3037165c7224b59998de469230ffd148f3554c50 Mon Sep 17 00:00:00 2001 From: VihasMakwana <121151420+VihasMakwana@users.noreply.github.com> Date: Tue, 8 Oct 2024 13:00:10 +0530 Subject: [PATCH] [system/process]: mark module as healthy if metrics are partially filled for single process as well. (#40924) * fix: mark module as healthy if metrics are partially filled for single processes * chore: fix lint * chore: wrap the error and return * chore: fix lint --------- Co-authored-by: subham sarkar (cherry picked from commit dc94114a914017843fb8d4eaa76de3b61a6787cd) --- metricbeat/module/system/process/process.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) 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 }