diff --git a/collector/drm_linux.go b/collector/drm_linux.go index 6c19514c4f..1739bc3d54 100644 --- a/collector/drm_linux.go +++ b/collector/drm_linux.go @@ -40,7 +40,7 @@ var ( drmCardInfo = prometheus.NewDesc( prometheus.BuildFQName(namespace, drmCollectorSubsystem, "card_info"), "Card information", - []string{"card", "memory_vendor", "power_performance_level", "unique_id", "vendor"}, nil, + []string{"card", "memory_vendor", "power_performance_level", "unique_id", "chip", "vendor"}, nil, ) drmGPUBusyPercent = prometheus.NewDesc( prometheus.BuildFQName(namespace, drmCollectorSubsystem, "gpu_busy_percent"), @@ -96,6 +96,17 @@ func (c *drmCollector) Update(ch chan<- prometheus.Metric) error { return c.updateAMDCards(ch) } +func chipName(s sysfs.ClassDRMCardAMDGPUStats) string { + // generate a chip name based on the deviceType and devName + cleanDevName := cleanMetricName(s.DevName) + cleanDevType := cleanMetricName(s.DevType) + + if cleanDevType != "" && cleanDevName != "" { + return cleanDevType + "_" + cleanDevName + } + return cleanDevName +} + func (c *drmCollector) updateAMDCards(ch chan<- prometheus.Metric) error { vendor := "amd" stats, err := c.fs.ClassDRMCardAMDGPUStats() @@ -106,7 +117,7 @@ func (c *drmCollector) updateAMDCards(ch chan<- prometheus.Metric) error { for _, s := range stats { ch <- prometheus.MustNewConstMetric( drmCardInfo, prometheus.GaugeValue, 1, - s.Name, s.MemoryVRAMVendor, s.PowerDPMForcePerformanceLevel, s.UniqueID, vendor) + s.Name, s.MemoryVRAMVendor, s.PowerDPMForcePerformanceLevel, s.UniqueID, chipName(s), vendor) ch <- prometheus.MustNewConstMetric( drmGPUBusyPercent, prometheus.GaugeValue, float64(s.GPUBusyPercent), s.Name)