Skip to content

Commit 2270495

Browse files
[processor/metricstransform] Fix silent data loss for single Summary metric in combine action
1 parent c0d84e7 commit 2270495

3 files changed

Lines changed: 38 additions & 3 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
change_type: bug_fix
2+
3+
component: processor/metrics_transform
4+
5+
note: combine action no longer silently drops data points when a single Summary metric matches the transform. The operation is now skipped with a warning log instead.
6+
7+
issues: [49693]
8+
9+
change_logs: [user]

processor/metricstransformprocessor/metrics_transform_processor_otlp.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,15 +324,18 @@ func initResourceMetrics(dest pmetric.ResourceMetrics, resource pcommon.Resource
324324

325325
// canBeCombined returns true if all the provided metrics share the same type, unit, and labels
326326
func canBeCombined(metrics []pmetric.Metric) error {
327+
for _, metric := range metrics {
328+
if metric.Type() == pmetric.MetricTypeSummary {
329+
return fmt.Errorf("Summary metrics cannot be combined: %v ", metric.Name())
330+
}
331+
}
332+
327333
if len(metrics) <= 1 {
328334
return nil
329335
}
330336

331337
var firstMetric pmetric.Metric
332338
for _, metric := range metrics {
333-
if metric.Type() == pmetric.MetricTypeSummary {
334-
return fmt.Errorf("Summary metrics cannot be combined: %v ", metric.Name())
335-
}
336339

337340
if firstMetric == (pmetric.Metric{}) {
338341
firstMetric = metric

processor/metricstransformprocessor/metrics_transform_processor_testcases_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1440,6 +1440,29 @@ var standardTests = []metricsTransformTest{
14401440
metricBuilder(pmetric.MetricTypeGauge, "metric3").addIntDatapoint(1, 1, 3).build(),
14411441
},
14421442
},
1443+
{
1444+
name: "combine_error_summary_single_match",
1445+
transforms: []internalTransform{
1446+
{
1447+
MetricIncludeFilter: internalFilterRegexp{include: regexp.MustCompile("^metric1$")},
1448+
Action: Combine,
1449+
NewName: "new",
1450+
AggregationType: aggregateutil.Sum,
1451+
},
1452+
},
1453+
in: []pmetric.Metric{
1454+
metricBuilder(pmetric.MetricTypeSummary, "metric1", "label1").
1455+
addSummaryDatapoint(1, 2, 10, 100.0, "label1-value1").
1456+
addSummaryDatapoint(1, 2, 20, 200.0, "label1-value2").build(),
1457+
metricBuilder(pmetric.MetricTypeGauge, "metric2").addIntDatapoint(1, 1, 2).build(),
1458+
},
1459+
out: []pmetric.Metric{
1460+
metricBuilder(pmetric.MetricTypeSummary, "metric1", "label1").
1461+
addSummaryDatapoint(1, 2, 10, 100.0, "label1-value1").
1462+
addSummaryDatapoint(1, 2, 20, 200.0, "label1-value2").build(),
1463+
metricBuilder(pmetric.MetricTypeGauge, "metric2").addIntDatapoint(1, 1, 2).build(),
1464+
},
1465+
},
14431466
// Toggle Data Type
14441467
{
14451468
name: "metric_toggle_scalar_data_type_int64_to_double",

0 commit comments

Comments
 (0)