in components/otelopscol/receiver/nvmlreceiver/scraper.go [67:105]
func (s *nvmlScraper) scrape(_ context.Context) (pmetric.Metrics, error) {
deviceMetrics, err := s.client.collectDeviceMetrics()
for _, metric := range deviceMetrics {
timestamp := pcommon.NewTimestampFromTime(metric.time)
model := s.client.getDeviceModelName(metric.gpuIndex)
UUID := s.client.getDeviceUUID(metric.gpuIndex)
gpuIndex := fmt.Sprintf("%d", metric.gpuIndex)
switch metric.name {
case "nvml.gpu.utilization":
s.mb.RecordNvmlGpuUtilizationDataPoint(
timestamp, metric.asFloat64(), model, gpuIndex, UUID)
case "nvml.gpu.memory.bytes_used":
s.mb.RecordNvmlGpuMemoryBytesUsedDataPoint(
timestamp, metric.asInt64(), model, gpuIndex, UUID, metadata.AttributeMemoryStateUsed)
case "nvml.gpu.memory.bytes_free":
s.mb.RecordNvmlGpuMemoryBytesUsedDataPoint(
timestamp, metric.asInt64(), model, gpuIndex, UUID, metadata.AttributeMemoryStateFree)
}
}
processMetrics := s.client.collectProcessMetrics()
for _, metric := range processMetrics {
timestamp := pcommon.NewTimestampFromTime(metric.time)
model := s.client.getDeviceModelName(metric.gpuIndex)
UUID := s.client.getDeviceUUID(metric.gpuIndex)
gpuIndex := fmt.Sprintf("%d", metric.gpuIndex)
s.mb.RecordNvmlGpuProcessesUtilizationDataPoint(
timestamp, float64(metric.lifetimeGpuUtilization)/100.0, model, gpuIndex, UUID, int64(metric.processPid),
metric.processName, metric.command, metric.commandLine, metric.owner)
s.mb.RecordNvmlGpuProcessesMaxBytesUsedDataPoint(
timestamp, int64(metric.lifetimeGpuMaxMemory), model, gpuIndex, UUID, int64(metric.processPid),
metric.processName, metric.command, metric.commandLine, metric.owner)
}
return s.mb.Emit(), err
}