Merge pull request #359 from CloudAndHeat/feature/hwmon_chip_name_metric
hwmon: Provide annotation metric to link chip sysfs paths to human-readable chip types
This commit is contained in:
commit
b68a9ec7af
|
@ -549,6 +549,11 @@ node_filefd_maximum 1.631329e+06
|
||||||
# HELP node_forks Total number of forks.
|
# HELP node_forks Total number of forks.
|
||||||
# TYPE node_forks counter
|
# TYPE node_forks counter
|
||||||
node_forks 26442
|
node_forks 26442
|
||||||
|
# HELP node_hwmon_chip_names Annotation metric for human-readable chip names
|
||||||
|
# TYPE node_hwmon_chip_names gauge
|
||||||
|
node_hwmon_chip_names{chip="nct6779",chip_name="nct6779"} 1
|
||||||
|
node_hwmon_chip_names{chip="platform_coretemp_0",chip_name="coretemp"} 1
|
||||||
|
node_hwmon_chip_names{chip="platform_coretemp_1",chip_name="coretemp"} 1
|
||||||
# HELP node_hwmon_fan_alarm Hardware sensor alarm status (fan)
|
# HELP node_hwmon_fan_alarm Hardware sensor alarm status (fan)
|
||||||
# TYPE node_hwmon_fan_alarm gauge
|
# TYPE node_hwmon_fan_alarm gauge
|
||||||
node_hwmon_fan_alarm{chip="nct6779",sensor="fan2"} 0
|
node_hwmon_fan_alarm{chip="nct6779",sensor="fan2"} 0
|
||||||
|
|
|
@ -36,6 +36,7 @@ var (
|
||||||
hwmonInvalidMetricChars = regexp.MustCompile("[^a-z0-9:_]")
|
hwmonInvalidMetricChars = regexp.MustCompile("[^a-z0-9:_]")
|
||||||
hwmonFilenameFormat = regexp.MustCompile(`^(?P<type>[^0-9]+)(?P<id>[0-9]*)?(_(?P<property>.+))?$`)
|
hwmonFilenameFormat = regexp.MustCompile(`^(?P<type>[^0-9]+)(?P<id>[0-9]*)?(_(?P<property>.+))?$`)
|
||||||
hwmonLabelDesc = []string{"chip", "sensor"}
|
hwmonLabelDesc = []string{"chip", "sensor"}
|
||||||
|
hwmonChipNameLabelDesc = []string{"chip", "chip_name"}
|
||||||
hwmonSensorTypes = []string{
|
hwmonSensorTypes = []string{
|
||||||
"vrm", "beep_enable", "update_interval", "in", "cpu", "fan",
|
"vrm", "beep_enable", "update_interval", "in", "cpu", "fan",
|
||||||
"pwm", "temp", "curr", "power", "energy", "humidity",
|
"pwm", "temp", "curr", "power", "energy", "humidity",
|
||||||
|
@ -143,6 +144,26 @@ func (c *hwMonCollector) updateHwmon(ch chan<- prometheus.Metric, dir string) (e
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hwmonChipName, err := c.hwmonHumanReadableChipName(dir)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
// sensor chip metadata
|
||||||
|
desc := prometheus.NewDesc(
|
||||||
|
"node_hwmon_chip_names",
|
||||||
|
"Annotation metric for human-readable chip names",
|
||||||
|
hwmonChipNameLabelDesc,
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
desc,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
1.0,
|
||||||
|
hwmonName,
|
||||||
|
hwmonChipName,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// format all sensors
|
// format all sensors
|
||||||
for sensor, sensorData := range data {
|
for sensor, sensorData := range data {
|
||||||
|
|
||||||
|
@ -351,6 +372,27 @@ func (c *hwMonCollector) hwmonName(dir string) (string, error) {
|
||||||
return "", errors.New("Could not derive a monitoring name for " + dir)
|
return "", errors.New("Could not derive a monitoring name for " + dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *hwMonCollector) hwmonHumanReadableChipName(dir string) (string, error) {
|
||||||
|
// this is similar to the methods in hwmonName, but with different
|
||||||
|
// precedences -- we can allow duplicates here.
|
||||||
|
|
||||||
|
// preference 1: is there a name file
|
||||||
|
|
||||||
|
sysnameRaw, nameErr := ioutil.ReadFile(path.Join(dir, "name"))
|
||||||
|
if nameErr != nil {
|
||||||
|
return "", nameErr
|
||||||
|
}
|
||||||
|
|
||||||
|
if string(sysnameRaw) != "" {
|
||||||
|
cleanName := cleanMetricName(string(sysnameRaw))
|
||||||
|
if cleanName != "" {
|
||||||
|
return cleanName, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", errors.New("Could not derive a human-readable chip type for " + dir)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *hwMonCollector) Update(ch chan<- prometheus.Metric) (err error) {
|
func (c *hwMonCollector) Update(ch chan<- prometheus.Metric) (err error) {
|
||||||
// Step 1: scan /sys/class/hwmon, resolve all symlinks and call
|
// Step 1: scan /sys/class/hwmon, resolve all symlinks and call
|
||||||
// updatesHwmon for each folder
|
// updatesHwmon for each folder
|
||||||
|
|
Loading…
Reference in New Issue