@@ -13,6 +13,8 @@ import (
13
13
"github.com/prometheus/prometheus/prompb"
14
14
"github.com/weaveworks/common/httpgrpc"
15
15
"github.com/weaveworks/common/middleware"
16
+ "go.opentelemetry.io/collector/pdata/pcommon"
17
+ "go.opentelemetry.io/collector/pdata/pmetric"
16
18
"go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp"
17
19
)
18
20
@@ -44,7 +46,7 @@ func OTLPHandler(sourceIPs *middleware.SourceIPExtractor, push Func) http.Handle
44
46
return
45
47
}
46
48
47
- tsMap , err := prometheusremotewrite .FromMetrics (req .Metrics (), prometheusremotewrite.Settings {DisableTargetInfo : true })
49
+ tsMap , err := prometheusremotewrite .FromMetrics (convertToMetricsAttributes ( req .Metrics () ), prometheusremotewrite.Settings {DisableTargetInfo : true })
48
50
if err != nil {
49
51
level .Error (logger ).Log ("err" , err .Error ())
50
52
http .Error (w , err .Error (), http .StatusBadRequest )
@@ -113,3 +115,69 @@ func makeExemplars(in []prompb.Exemplar) []cortexpb.Exemplar {
113
115
}
114
116
return out
115
117
}
118
+
119
+ func convertToMetricsAttributes (md pmetric.Metrics ) pmetric.Metrics {
120
+ cloneMd := pmetric .NewMetrics ()
121
+ md .CopyTo (cloneMd )
122
+ rms := cloneMd .ResourceMetrics ()
123
+ for i := 0 ; i < rms .Len (); i ++ {
124
+ resource := rms .At (i ).Resource ()
125
+
126
+ ilms := rms .At (i ).ScopeMetrics ()
127
+ for j := 0 ; j < ilms .Len (); j ++ {
128
+ ilm := ilms .At (j )
129
+ metricSlice := ilm .Metrics ()
130
+ for k := 0 ; k < metricSlice .Len (); k ++ {
131
+ addAttributesToMetric (metricSlice .At (k ), resource .Attributes ())
132
+ }
133
+ }
134
+ }
135
+ return cloneMd
136
+ }
137
+
138
+ // addAttributesToMetric adds additional labels to the given metric
139
+ func addAttributesToMetric (metric pmetric.Metric , labelMap pcommon.Map ) {
140
+ switch metric .Type () {
141
+ case pmetric .MetricTypeGauge :
142
+ addAttributesToNumberDataPoints (metric .Gauge ().DataPoints (), labelMap )
143
+ case pmetric .MetricTypeSum :
144
+ addAttributesToNumberDataPoints (metric .Sum ().DataPoints (), labelMap )
145
+ case pmetric .MetricTypeHistogram :
146
+ addAttributesToHistogramDataPoints (metric .Histogram ().DataPoints (), labelMap )
147
+ case pmetric .MetricTypeSummary :
148
+ addAttributesToSummaryDataPoints (metric .Summary ().DataPoints (), labelMap )
149
+ case pmetric .MetricTypeExponentialHistogram :
150
+ addAttributesToExponentialHistogramDataPoints (metric .ExponentialHistogram ().DataPoints (), labelMap )
151
+ }
152
+ }
153
+
154
+ func addAttributesToNumberDataPoints (ps pmetric.NumberDataPointSlice , newAttributeMap pcommon.Map ) {
155
+ for i := 0 ; i < ps .Len (); i ++ {
156
+ joinAttributeMaps (newAttributeMap , ps .At (i ).Attributes ())
157
+ }
158
+ }
159
+
160
+ func addAttributesToHistogramDataPoints (ps pmetric.HistogramDataPointSlice , newAttributeMap pcommon.Map ) {
161
+ for i := 0 ; i < ps .Len (); i ++ {
162
+ joinAttributeMaps (newAttributeMap , ps .At (i ).Attributes ())
163
+ }
164
+ }
165
+
166
+ func addAttributesToSummaryDataPoints (ps pmetric.SummaryDataPointSlice , newAttributeMap pcommon.Map ) {
167
+ for i := 0 ; i < ps .Len (); i ++ {
168
+ joinAttributeMaps (newAttributeMap , ps .At (i ).Attributes ())
169
+ }
170
+ }
171
+
172
+ func addAttributesToExponentialHistogramDataPoints (ps pmetric.ExponentialHistogramDataPointSlice , newAttributeMap pcommon.Map ) {
173
+ for i := 0 ; i < ps .Len (); i ++ {
174
+ joinAttributeMaps (newAttributeMap , ps .At (i ).Attributes ())
175
+ }
176
+ }
177
+
178
+ func joinAttributeMaps (from , to pcommon.Map ) {
179
+ from .Range (func (k string , v pcommon.Value ) bool {
180
+ v .CopyTo (to .PutEmpty (k ))
181
+ return true
182
+ })
183
+ }
0 commit comments