diff --git a/src/otel/metrics.rs b/src/otel/metrics.rs index 6206cd0d5..56510be9d 100644 --- a/src/otel/metrics.rs +++ b/src/otel/metrics.rs @@ -16,6 +16,7 @@ * */ use opentelemetry_proto::tonic::collector::metrics::v1::ExportMetricsServiceRequest; +use opentelemetry_proto::tonic::common::v1::KeyValue; use opentelemetry_proto::tonic::metrics::v1::number_data_point::Value as NumberDataPointValue; use opentelemetry_proto::tonic::metrics::v1::{ Exemplar, ExponentialHistogram, Gauge, Histogram, Metric, MetricsData, NumberDataPoint, Sum, @@ -23,6 +24,8 @@ use opentelemetry_proto::tonic::metrics::v1::{ }; use serde_json::{Map, Value}; +use crate::otel::otel_utils::flatten_attributes; + use super::otel_utils::{ convert_epoch_nano_to_timestamp, insert_attributes, insert_number_if_some, }; @@ -73,7 +76,7 @@ fn flatten_exemplar(exemplars: &[Exemplar]) -> Vec> { .iter() .map(|exemplar| { let mut exemplar_json = Map::new(); - insert_attributes(&mut exemplar_json, &exemplar.filtered_attributes); + insert_exemplar_attributes(&mut exemplar_json, &exemplar.filtered_attributes); exemplar_json.insert( "exemplar_time_unix_nano".to_string(), Value::String(convert_epoch_nano_to_timestamp( @@ -120,7 +123,7 @@ fn flatten_number_data_points(data_points: &[NumberDataPoint]) -> Vec Vec> { let mut data_points_json = Vec::new(); for data_point in &histogram.data_points { let mut data_point_json = Map::new(); - insert_attributes(&mut data_point_json, &data_point.attributes); + insert_metric_attributes(&mut data_point_json, &data_point.attributes); data_point_json.insert( "start_time_unix_nano".to_string(), Value::String(convert_epoch_nano_to_timestamp( @@ -315,7 +318,7 @@ fn flatten_exp_histogram(exp_histogram: &ExponentialHistogram) -> Vec Vec> { let mut data_points_json = Vec::new(); for data_point in &summary.data_points { let mut data_point_json = Map::new(); - insert_attributes(&mut data_point_json, &data_point.attributes); + insert_metric_attributes(&mut data_point_json, &data_point.attributes); data_point_json.insert( "start_time_unix_nano".to_string(), Value::String(convert_epoch_nano_to_timestamp( @@ -647,3 +650,17 @@ fn flatten_data_point_flags(flags: u32) -> Map { ); data_point_flags_json } + +fn insert_metric_attributes(map: &mut Map, attributes: &[KeyValue]) { + let attributes_json = flatten_attributes(attributes); + for (key, value) in attributes_json { + map.insert(format!("metric_{}", key), value); + } +} + +fn insert_exemplar_attributes(map: &mut Map, attributes: &[KeyValue]) { + let attributes_json = flatten_attributes(attributes); + for (key, value) in attributes_json { + map.insert(format!("exemplar_{}", key), value); + } +}