in plugins/processors/gpuattributes/processor.go [101:151]
func (d *gpuAttributesProcessor) processMetricAttributes(m pmetric.Metric) {
// only decorate GPU metrics
isGpuMetric := strings.Contains(m.Name(), gpuMetricIdentifier)
isNeuronMetric := d.awsNeuronMetricChecker.IsProcessedNeuronMetric(m.Name())
if !isNeuronMetric && !isGpuMetric {
return
}
labelFilter := map[string]map[string]interface{}{}
if isGpuMetric {
if strings.HasPrefix(m.Name(), containerMetricPrefix) {
labelFilter = metricFilters.ContainerGpuLabelFilter
} else if strings.HasPrefix(m.Name(), podMetricPrefix) {
labelFilter = metricFilters.PodGpuLabelFilter
} else if strings.HasPrefix(m.Name(), nodeMetricPrefix) {
labelFilter = metricFilters.NodeGpuLabelFilter
}
} else if isNeuronMetric {
if strings.HasPrefix(m.Name(), containerMetricPrefix) {
labelFilter = metricFilters.ContainerNeuronLabelFilter
} else if strings.HasPrefix(m.Name(), podMetricPrefix) {
labelFilter = metricFilters.PodNeuronLabelFilter
} else if strings.HasPrefix(m.Name(), nodeMetricPrefix) {
labelFilter = metricFilters.NodeNeuronLabelFilter
}
if strings.Contains(m.Name(), "_neurondevice_hw") {
if kubernetesMap, ok := labelFilter[internal.Kubernetes]; ok {
// cloning is done to avoid modifying the original label filters
labelFilter = maps.Clone(labelFilter)
kubernetesMap := maps.Clone(kubernetesMap)
delete(kubernetesMap, "labels")
labelFilter[internal.Kubernetes] = kubernetesMap
}
}
}
var dps pmetric.NumberDataPointSlice
switch m.Type() {
case pmetric.MetricTypeGauge:
dps = m.Gauge().DataPoints()
case pmetric.MetricTypeSum:
dps = m.Sum().DataPoints()
default:
d.logger.Debug("Ignore unknown metric type", zap.String(containerinsightscommon.MetricType, m.Type().String()))
}
for i := 0; i < dps.Len(); i++ {
d.filterAttributes(dps.At(i).Attributes(), labelFilter)
}
}