From c52adb26bdd066fa3463e02a4b1bac19ebb8664b Mon Sep 17 00:00:00 2001 From: Wei Li Date: Mon, 27 Oct 2025 10:48:43 -0700 Subject: [PATCH] Fix metric type fluctuates between counter and gauge for a given metric Currently, if a counter metric's delta value fluctuates between 0 and non-0, it will lead to its metric type fluctuating between COUNTER and GAUGE in the otel prometheus exporter, thus getting dropped due to type conflict. The solution is to keep counter metric to be counter type without considering its delta value --- src/pkg/otelcolclient/otelcolclient.go | 2 +- src/pkg/otelcolclient/otelcolclient_test.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pkg/otelcolclient/otelcolclient.go b/src/pkg/otelcolclient/otelcolclient.go index e1354a838..592dfd9cd 100644 --- a/src/pkg/otelcolclient/otelcolclient.go +++ b/src/pkg/otelcolclient/otelcolclient.go @@ -236,7 +236,7 @@ func (c *Client) writeCounter(e *loggregator_v2.Envelope) { Data: &metricspb.Metric_Sum{ Sum: &metricspb.Sum{ AggregationTemporality: metricspb.AggregationTemporality_AGGREGATION_TEMPORALITY_CUMULATIVE, - IsMonotonic: e.GetCounter().GetDelta() == 0, + IsMonotonic: true, DataPoints: []*metricspb.NumberDataPoint{ { TimeUnixNano: uint64(e.GetTimestamp()), // nolint:gosec diff --git a/src/pkg/otelcolclient/otelcolclient_test.go b/src/pkg/otelcolclient/otelcolclient_test.go index a261616fd..6aa265524 100644 --- a/src/pkg/otelcolclient/otelcolclient_test.go +++ b/src/pkg/otelcolclient/otelcolclient_test.go @@ -440,7 +440,7 @@ var _ = Describe("Client", func() { Expect(returnedErr).NotTo(HaveOccurred()) }) - It("emits a non-monotonic sum", func() { + It("emits a monotonic sum", func() { var msr *colmetricspb.ExportMetricsServiceRequest Expect(spyMSC.requests).To(Receive(&msr)) @@ -455,7 +455,7 @@ var _ = Describe("Client", func() { Data: &metricspb.Metric_Sum{ Sum: &metricspb.Sum{ AggregationTemporality: metricspb.AggregationTemporality_AGGREGATION_TEMPORALITY_CUMULATIVE, - IsMonotonic: false, + IsMonotonic: true, DataPoints: []*metricspb.NumberDataPoint{ { TimeUnixNano: 1257894000000000000,