From 3e737ddcccce1521411c54a979feb1e9f5efd25f Mon Sep 17 00:00:00 2001 From: JBD Date: Wed, 26 May 2021 15:06:47 -0700 Subject: [PATCH] Log dropped metric count when exporting from PRW exporter Fixes https://github.com/open-telemetry/wg-prometheus/issues/13. --- exporter/prometheusremotewriteexporter/exporter.go | 8 ++++++-- exporter/prometheusremotewriteexporter/exporter_test.go | 9 +++++---- exporter/prometheusremotewriteexporter/factory.go | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/exporter/prometheusremotewriteexporter/exporter.go b/exporter/prometheusremotewriteexporter/exporter.go index 4e50ca44eb8..fd35c4fc65a 100644 --- a/exporter/prometheusremotewriteexporter/exporter.go +++ b/exporter/prometheusremotewriteexporter/exporter.go @@ -31,6 +31,7 @@ import ( "github.com/gogo/protobuf/proto" "github.com/golang/snappy" "github.com/prometheus/prometheus/prompb" + "go.uber.org/zap" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/config/confighttp" @@ -51,10 +52,11 @@ type PRWExporter struct { concurrency int userAgentHeader string clientSettings *confighttp.HTTPClientSettings + logger *zap.Logger } // NewPRWExporter initializes a new PRWExporter instance and sets fields accordingly. -func NewPRWExporter(cfg *Config, buildInfo component.BuildInfo) (*PRWExporter, error) { +func NewPRWExporter(cfg *Config, buildInfo component.BuildInfo, logger *zap.Logger) (*PRWExporter, error) { sanitizedLabels, err := validateAndSanitizeExternalLabels(cfg.ExternalLabels) if err != nil { return nil, err @@ -76,6 +78,7 @@ func NewPRWExporter(cfg *Config, buildInfo component.BuildInfo) (*PRWExporter, e userAgentHeader: userAgentHeader, concurrency: cfg.RemoteWriteQueue.NumConsumers, clientSettings: &cfg.HTTPClientSettings, + logger: logger, }, nil } @@ -158,7 +161,8 @@ func (prwe *PRWExporter) PushMetrics(ctx context.Context, md pdata.Metrics) erro errs = append(errs, exportErrors...) } - if dropped != 0 { + if dropped > 0 { + prwe.logger.Info("Prometheus remote write dropped metrics", zap.Int("dropped_count", dropped)) return consumererror.Combine(errs) } diff --git a/exporter/prometheusremotewriteexporter/exporter_test.go b/exporter/prometheusremotewriteexporter/exporter_test.go index 1eda3f6e9b8..b6300669774 100644 --- a/exporter/prometheusremotewriteexporter/exporter_test.go +++ b/exporter/prometheusremotewriteexporter/exporter_test.go @@ -28,6 +28,7 @@ import ( "github.com/prometheus/prometheus/prompb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/zap" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" @@ -110,7 +111,7 @@ func Test_NewPRWExporter(t *testing.T) { cfg.ExternalLabels = tt.externalLabels cfg.Namespace = tt.namespace cfg.RemoteWriteQueue.NumConsumers = 1 - prwe, err := NewPRWExporter(cfg, tt.buildInfo) + prwe, err := NewPRWExporter(cfg, tt.buildInfo, zap.NewNop()) if tt.returnErrorOnCreate { assert.Error(t, err) @@ -191,7 +192,7 @@ func Test_Start(t *testing.T) { cfg.RemoteWriteQueue.NumConsumers = 1 cfg.HTTPClientSettings = tt.clientSettings - prwe, err := NewPRWExporter(cfg, tt.buildInfo) + prwe, err := NewPRWExporter(cfg, tt.buildInfo, zap.NewNop()) assert.NoError(t, err) assert.NotNil(t, prwe) @@ -333,7 +334,7 @@ func runExportPipeline(ts *prompb.TimeSeries, endpoint *url.URL) []error { Version: "1.0", } // after this, instantiate a CortexExporter with the current HTTP client and endpoint set to passed in endpoint - prwe, err := NewPRWExporter(cfg, buildInfo) + prwe, err := NewPRWExporter(cfg, buildInfo, zap.NewNop()) if err != nil { errs = append(errs, err) return errs @@ -591,7 +592,7 @@ func Test_PushMetrics(t *testing.T) { Description: "OpenTelemetry Collector", Version: "1.0", } - prwe, nErr := NewPRWExporter(cfg, buildInfo) + prwe, nErr := NewPRWExporter(cfg, buildInfo, zap.NewNop()) require.NoError(t, nErr) require.NoError(t, prwe.Start(context.Background(), componenttest.NewNopHost())) err := prwe.PushMetrics(context.Background(), *tt.md) diff --git a/exporter/prometheusremotewriteexporter/factory.go b/exporter/prometheusremotewriteexporter/factory.go index 6b9b2c155a1..4e46348074c 100644 --- a/exporter/prometheusremotewriteexporter/factory.go +++ b/exporter/prometheusremotewriteexporter/factory.go @@ -45,7 +45,7 @@ func createMetricsExporter(_ context.Context, params component.ExporterCreatePar return nil, errors.New("invalid configuration") } - prwe, err := NewPRWExporter(prwCfg, params.BuildInfo) + prwe, err := NewPRWExporter(prwCfg, params.BuildInfo, params.Logger) if err != nil { return nil, err }