@@ -32,8 +32,23 @@ const (
32
32
// DimensionRollupOptions
33
33
zeroAndSingleDimensionRollup = "ZeroAndSingleDimensionRollup"
34
34
singleDimensionRollupOnly = "SingleDimensionRollupOnly"
35
+
36
+ prometheusReceiver = "prometheus"
37
+ attributeReceiver = "receiver"
38
+ fieldPrometheusMetricType = "prom_metric_type"
35
39
)
36
40
41
+ var fieldPrometheusTypes = map [pdata.MetricDataType ]string {
42
+ pdata .MetricDataTypeNone : "" ,
43
+ pdata .MetricDataTypeIntGauge : "gauge" ,
44
+ pdata .MetricDataTypeDoubleGauge : "gauge" ,
45
+ pdata .MetricDataTypeIntSum : "counter" ,
46
+ pdata .MetricDataTypeDoubleSum : "counter" ,
47
+ pdata .MetricDataTypeIntHistogram : "histogram" ,
48
+ pdata .MetricDataTypeDoubleHistogram : "histogram" ,
49
+ pdata .MetricDataTypeDoubleSummary : "summary" ,
50
+ }
51
+
37
52
// CWMetrics defines
38
53
type CWMetrics struct {
39
54
Measurements []CWMeasurement
@@ -63,6 +78,9 @@ type CWMetricMetadata struct {
63
78
LogGroup string
64
79
LogStream string
65
80
InstrumentationLibraryName string
81
+
82
+ receiver string
83
+ metricDataType pdata.MetricDataType
66
84
}
67
85
68
86
type metricTranslator struct {
@@ -87,6 +105,10 @@ func (mt metricTranslator) translateOTelToGroupedMetric(rm *pdata.ResourceMetric
87
105
logGroup , logStream := getLogInfo (rm , cWNamespace , config )
88
106
89
107
ilms := rm .InstrumentationLibraryMetrics ()
108
+ var metricReceiver string
109
+ if receiver , ok := rm .Resource ().Attributes ().Get (attributeReceiver ); ok {
110
+ metricReceiver = receiver .StringVal ()
111
+ }
90
112
for j := 0 ; j < ilms .Len (); j ++ {
91
113
ilm := ilms .At (j )
92
114
if ilm .InstrumentationLibrary ().Name () == "" {
@@ -104,6 +126,8 @@ func (mt metricTranslator) translateOTelToGroupedMetric(rm *pdata.ResourceMetric
104
126
LogGroup : logGroup ,
105
127
LogStream : logStream ,
106
128
InstrumentationLibraryName : instrumentationLibName ,
129
+ receiver : metricReceiver ,
130
+ metricDataType : metric .DataType (),
107
131
}
108
132
addToGroupedMetric (& metric , groupedMetrics , metadata , config .logger , mt .metricDescriptor )
109
133
}
@@ -113,17 +137,25 @@ func (mt metricTranslator) translateOTelToGroupedMetric(rm *pdata.ResourceMetric
113
137
// translateGroupedMetricToCWMetric converts Grouped Metric format to CloudWatch Metric format.
114
138
func translateGroupedMetricToCWMetric (groupedMetric * GroupedMetric , config * Config ) * CWMetrics {
115
139
labels := groupedMetric .Labels
116
- fields := make (map [string ]interface {}, len (labels )+ len (groupedMetric .Metrics ))
140
+ fieldsLength := len (labels ) + len (groupedMetric .Metrics )
141
+
142
+ isPrometheusMetric := groupedMetric .Metadata .receiver == prometheusReceiver
143
+ if isPrometheusMetric {
144
+ fieldsLength ++
145
+ }
146
+ fields := make (map [string ]interface {}, fieldsLength )
117
147
118
148
// Add labels to fields
119
149
for k , v := range labels {
120
150
fields [k ] = v
121
151
}
122
-
123
152
// Add metrics to fields
124
153
for metricName , metricInfo := range groupedMetric .Metrics {
125
154
fields [metricName ] = metricInfo .Value
126
155
}
156
+ if isPrometheusMetric {
157
+ fields [fieldPrometheusMetricType ] = fieldPrometheusTypes [groupedMetric .Metadata .metricDataType ]
158
+ }
127
159
128
160
var cWMeasurements []CWMeasurement
129
161
if len (config .MetricDeclarations ) == 0 {
@@ -181,7 +213,9 @@ func groupedMetricToCWMeasurement(groupedMetric *GroupedMetric, config *Config)
181
213
for metricName , metricInfo := range groupedMetric .Metrics {
182
214
metrics [idx ] = map [string ]string {
183
215
"Name" : metricName ,
184
- "Unit" : metricInfo .Unit ,
216
+ }
217
+ if metricInfo .Unit != "" {
218
+ metrics [idx ]["Unit" ] = metricInfo .Unit
185
219
}
186
220
idx ++
187
221
}
@@ -247,7 +281,9 @@ func groupedMetricToCWMeasurementsWithFilters(groupedMetric *GroupedMetric, conf
247
281
248
282
metric := map [string ]string {
249
283
"Name" : metricName ,
250
- "Unit" : metricInfo .Unit ,
284
+ }
285
+ if metricInfo .Unit != "" {
286
+ metric ["Unit" ] = metricInfo .Unit
251
287
}
252
288
metricDeclKey := fmt .Sprint (metricDeclIdx )
253
289
if group , ok := metricDeclGroups [metricDeclKey ]; ok {
0 commit comments