Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions pkg/collector/hwmon.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ type hwmon struct {
sensors []hwmonSensor
name string
chipName string
index string
}

type hwmonSensor struct {
Expand All @@ -63,23 +64,23 @@ func NewHwmonCollector(logger *slog.Logger) (Collector, error) {

metricDesc["power_input"] = prometheus.NewDesc(
prometheus.BuildFQName(Namespace, hwmonCollectorSubSystem, "power_current_watts"),
"Current Power consumption in watts", []string{"hostname", "sensor", "chip", "chip_name"}, nil,
"Current Power consumption in watts", []string{"hostname", "index", "sensor", "chip", "chip_name"}, nil,
)
metricDesc["power_input_lowest"] = prometheus.NewDesc(
prometheus.BuildFQName(Namespace, hwmonCollectorSubSystem, "power_min_watts"),
"Minimum Power consumption in watts", []string{"hostname", "sensor", "chip", "chip_name"}, nil,
"Minimum Power consumption in watts", []string{"hostname", "index", "sensor", "chip", "chip_name"}, nil,
)
metricDesc["power_input_highest"] = prometheus.NewDesc(
prometheus.BuildFQName(Namespace, hwmonCollectorSubSystem, "power_max_watts"),
"Maximum Power consumption in watts", []string{"hostname", "sensor", "chip", "chip_name"}, nil,
"Maximum Power consumption in watts", []string{"hostname", "index", "sensor", "chip", "chip_name"}, nil,
)
metricDesc["power_average"] = prometheus.NewDesc(
prometheus.BuildFQName(Namespace, hwmonCollectorSubSystem, "power_avg_watts"),
"Average Power consumption in watts", []string{"hostname", "sensor", "chip", "chip_name"}, nil,
"Average Power consumption in watts", []string{"hostname", "index", "sensor", "chip", "chip_name"}, nil,
)
metricDesc["energy_input"] = prometheus.NewDesc(
prometheus.BuildFQName(Namespace, hwmonCollectorSubSystem, "energy_current_joules"),
"Current Energy consumption in joules", []string{"hostname", "sensor", "chip", "chip_name"}, nil,
"Current Energy consumption in joules", []string{"hostname", "index", "sensor", "chip", "chip_name"}, nil,
)

hwmonCollector := &hwmonCollector{
Expand Down Expand Up @@ -116,6 +117,7 @@ func (c *hwmonCollector) Update(ch chan<- prometheus.Metric) error {
prometheus.GaugeValue,
val/1000000.0,
c.hostname,
mon.index,
fmt.Sprintf("%s%d", sensor.sensorType, sensor.sensorNum),
mon.name,
mon.chipName,
Expand Down Expand Up @@ -215,6 +217,11 @@ func getHwmon(dir string) (*hwmon, error) {

hwmon := &hwmon{dir: dir, name: hwmonName, sensors: sensors}

// Extract index from directory name (e.g., "hwmon1" -> "1")
if index, ok := strings.CutPrefix(filepath.Base(dir), "hwmon"); ok {
hwmon.index = index
}

hwmonChipName, err := hwmonHumanReadableChipName(dir)
if err == nil {
hwmon.chipName = hwmonChipName
Expand Down
3 changes: 3 additions & 0 deletions pkg/collector/hwmon_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ func TestHwmonMetrics(t *testing.T) {
gotValues[mon.name][sensor.sensorProperty][fmt.Sprintf("%s%d", sensor.sensorType, sensor.sensorNum)] = val
}
}

// Verify index is extracted (should not be empty for hwmon devices)
assert.NotEmpty(t, mon.index, "Monitor index should not be empty")
}

assert.Equal(t, expectedHwmonValues, gotValues)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,24 +157,24 @@ ceems_cpu_seconds_total{hostname="",mode="user"} 3018.54
# TYPE ceems_exporter_build_info gauge
# HELP ceems_hwmon_energy_current_joules Current Energy consumption in joules
# TYPE ceems_hwmon_energy_current_joules gauge
ceems_hwmon_energy_current_joules{chip="socket",chip_name="socket",hostname="",sensor="energy1"} 22323
ceems_hwmon_energy_current_joules{chip="socket",chip_name="socket",hostname="",sensor="energy2"} 9509
ceems_hwmon_energy_current_joules{chip="socket",chip_name="socket",hostname="",index="4",sensor="energy1"} 22323
ceems_hwmon_energy_current_joules{chip="socket",chip_name="socket",hostname="",index="4",sensor="energy2"} 9509
# HELP ceems_hwmon_power_avg_watts Average Power consumption in watts
# TYPE ceems_hwmon_power_avg_watts gauge
ceems_hwmon_power_avg_watts{chip="socket",chip_name="socket",hostname="",sensor="power1"} 234
ceems_hwmon_power_avg_watts{chip="socket",chip_name="socket",hostname="",sensor="power2"} 120
ceems_hwmon_power_avg_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power1"} 234
ceems_hwmon_power_avg_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power2"} 120
# HELP ceems_hwmon_power_current_watts Current Power consumption in watts
# TYPE ceems_hwmon_power_current_watts gauge
ceems_hwmon_power_current_watts{chip="socket",chip_name="socket",hostname="",sensor="power1"} 270
ceems_hwmon_power_current_watts{chip="socket",chip_name="socket",hostname="",sensor="power2"} 156
ceems_hwmon_power_current_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power1"} 270
ceems_hwmon_power_current_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power2"} 156
# HELP ceems_hwmon_power_max_watts Maximum Power consumption in watts
# TYPE ceems_hwmon_power_max_watts gauge
ceems_hwmon_power_max_watts{chip="socket",chip_name="socket",hostname="",sensor="power1"} 328
ceems_hwmon_power_max_watts{chip="socket",chip_name="socket",hostname="",sensor="power2"} 190
ceems_hwmon_power_max_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power1"} 328
ceems_hwmon_power_max_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power2"} 190
# HELP ceems_hwmon_power_min_watts Minimum Power consumption in watts
# TYPE ceems_hwmon_power_min_watts gauge
ceems_hwmon_power_min_watts{chip="socket",chip_name="socket",hostname="",sensor="power1"} 65
ceems_hwmon_power_min_watts{chip="socket",chip_name="socket",hostname="",sensor="power2"} 46
ceems_hwmon_power_min_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power1"} 65
ceems_hwmon_power_min_watts{chip="socket",chip_name="socket",hostname="",index="4",sensor="power2"} 46
# HELP ceems_ipmi_dcmi_power_avg_watts Average power consumption reported by DCMI in watts
# TYPE ceems_ipmi_dcmi_power_avg_watts gauge
ceems_ipmi_dcmi_power_avg_watts{hostname=""} 2567
Expand Down
Loading