in exporter/collector/metrics.go [1459:1513]
func (m *metricMapper) labelDescriptors(
pm pmetric.Metric,
extraLabels labels,
) []*label.LabelDescriptor {
// TODO - allow customization of label descriptions.
result := []*label.LabelDescriptor{}
for key := range extraLabels {
result = append(result, &label.LabelDescriptor{
Key: sanitizeKey(key),
})
}
seenKeys := map[string]struct{}{}
addAttributes := func(attr pcommon.Map) {
attr.Range(func(key string, _ pcommon.Value) bool {
// Skip keys that have already been set
if _, ok := seenKeys[sanitizeKey(key)]; ok {
return true
}
result = append(result, &label.LabelDescriptor{
Key: sanitizeKey(key),
})
seenKeys[sanitizeKey(key)] = struct{}{}
return true
})
}
switch pm.Type() {
case pmetric.MetricTypeGauge:
points := pm.Gauge().DataPoints()
for i := 0; i < points.Len(); i++ {
addAttributes(points.At(i).Attributes())
}
case pmetric.MetricTypeSum:
points := pm.Sum().DataPoints()
for i := 0; i < points.Len(); i++ {
addAttributes(points.At(i).Attributes())
}
case pmetric.MetricTypeSummary:
points := pm.Summary().DataPoints()
for i := 0; i < points.Len(); i++ {
addAttributes(points.At(i).Attributes())
}
case pmetric.MetricTypeHistogram:
points := pm.Histogram().DataPoints()
for i := 0; i < points.Len(); i++ {
addAttributes(points.At(i).Attributes())
}
case pmetric.MetricTypeExponentialHistogram:
points := pm.ExponentialHistogram().DataPoints()
for i := 0; i < points.Len(); i++ {
addAttributes(points.At(i).Attributes())
}
}
return result
}