From 769f8ab6ce36157b823fa98e842b33c26e5e283f Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Wed, 22 Jan 2025 11:25:21 -0800 Subject: [PATCH 1/2] Log errors when ignoreZeroResult = true Signed-off-by: Anders Swanson --- collector/collector.go | 8 ++++---- collector/errors.go | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 collector/errors.go diff --git a/collector/collector.go b/collector/collector.go index 25d0f38..644691a 100644 --- a/collector/collector.go +++ b/collector/collector.go @@ -360,9 +360,7 @@ func (e *Exporter) scrape(ch chan<- prometheus.Metric, tick *time.Time) { err = err1 } errmutex.Unlock() - if !metric.IgnoreZeroResult { - // do not print repetitive error messages for metrics - // with ignoreZeroResult set to true + if shouldLogScrapeError(err, metric.IgnoreZeroResult) { level.Error(e.logger).Log("msg", "Error scraping metric", "Context", metric.Context, "MetricsDesc", fmt.Sprint(metric.MetricsDesc), @@ -622,7 +620,9 @@ func (e *Exporter) scrapeGenericValues(db *sql.DB, ch chan<- prometheus.Metric, return err } if !ignoreZeroResult && metricsCount == 0 { - return errors.New("no metrics found while parsing, query returned no rows") + // a zero result error is returned for caller error identification. + // https://github.com/oracle/oracle-db-appdev-monitoring/issues/168 + return newZeroResultError() } return err } diff --git a/collector/errors.go b/collector/errors.go new file mode 100644 index 0000000..000de5b --- /dev/null +++ b/collector/errors.go @@ -0,0 +1,25 @@ +// Copyright (c) 2024, Oracle and/or its affiliates. +// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +package collector + +import "errors" + +type zeroResultError struct { + err string +} + +func (z *zeroResultError) Error() string { + return z.err +} + +func newZeroResultError() error { + return &zeroResultError{ + err: "no metrics found while parsing, query returned no rows", + } +} + +// shouldLogScrapeError returns true if the error is a zero result error and zero result errors are ignored. +func shouldLogScrapeError(err error, isIgnoreZeroResult bool) bool { + return !isIgnoreZeroResult || !errors.Is(err, newZeroResultError()) +} From c429b5e58c1851a6c40449c7783710d3fdb560e6 Mon Sep 17 00:00:00 2001 From: Anders Swanson Date: Wed, 22 Jan 2025 11:35:36 -0800 Subject: [PATCH 2/2] Log errors when ignoreZeroResult = true Signed-off-by: Anders Swanson --- collector/errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collector/errors.go b/collector/errors.go index 000de5b..dd4ea14 100644 --- a/collector/errors.go +++ b/collector/errors.go @@ -19,7 +19,7 @@ func newZeroResultError() error { } } -// shouldLogScrapeError returns true if the error is a zero result error and zero result errors are ignored. +// shouldLogScrapeError returns false if the error is a zero result error and zero result errors are ignored. func shouldLogScrapeError(err error, isIgnoreZeroResult bool) bool { return !isIgnoreZeroResult || !errors.Is(err, newZeroResultError()) }