Redfish hardware metrics¶
The redfish hardware type supports sending hardware metrics via the
notification system. The event_type field of
a notification will be set to hardware.redfish.metrics (where redfish
may be replaced by a different driver name for hardware types derived from it).
Enabling redfish hardware metrics requires some ironic.conf configuration file updates:
[oslo_messaging_notifications]
# The Drivers(s) to handle sending notifications. Possible
# values are messaging, messagingv2, routing, log, test, noop,
# prometheus_exporter (multi valued)
# Example using the messagingv2 driver:
driver = messagingv2
[sensor_data]
send_sensor_data = true
[metrics]
backend = collector
A full list of [oslo_messaging_notifications] configuration options can be found in the
oslo.messaging documentation
The payload of each notification is a mapping where keys are sensor types
(Fan, Temperature, Power or Drive) and values are also mappings
from sensor identifiers to the sensor data.
Each Fan payload contains the following fields:
max_reading_range,min_reading_range- the range of reading values.reading,reading_units- the current reading and its units.serial_number- the serial number of the fan sensor.physical_context- the context of the sensor, such asSystemBoard. Can also benullor justFan.
Each Temperature payload contains the following fields:
max_reading_range_temp,min_reading_range_temp- the range of reading values.reading_celsius- the current reading in degrees Celsius.sensor_number- the number of the temperature sensor.physical_context- the context of the sensor, usually reflecting its location, such asCPU,Memory,Intake,PowerSupplyorSystemBoard. Can also benull.
Each Power payload contains the following fields:
power_capacity_watts,line_input_voltage,last_power_output_wattsserial_number- the serial number of the power source.state- the power source state:enabled,absent(nullif unknown).health- the power source health status:ok,warning,critical(nullif unknown).
Each Drive payload contains the following fields:
name- the drive name in the BMC (this is not a Linux device name like/dev/sda).model- the drive model (if known).capacity_bytes- the drive capacity in bytes.state- the drive state:enabled,absent(nullif unknown).health- the drive health status:ok,warning,critical(nullif unknown).
Note
Drive payloads are often not available on real hardware.
Warning
Metrics collection works by polling several Redfish endpoints on the target BMC. Some older BMC implementations may have hard rate limits or misbehave under load. If this is the case for you, you need to reduce the metrics collection frequency or completely disable it.
Example (Dell)¶
{
"message_id": "578628d2-9967-4d33-97ca-7e7c27a76abc",
"publisher_id": "conductor-1.example.com",
"event_type": "hardware.redfish.metrics",
"priority": "INFO",
"payload": {
"message_id": "60653d54-87aa-43b8-a4ed-96d568dd4e96",
"instance_uuid": null,
"node_uuid": "aea161dc-2e96-4535-b003-ca70a4a7bb6d",
"timestamp": "2023-10-22T15:50:26.841964",
"node_name": "dell-430",
"event_type": "hardware.redfish.metrics.update",
"payload": {
"Fan": {
"0x17||Fan.Embedded.1A@System.Embedded.1": {
"identity": "0x17||Fan.Embedded.1A",
"max_reading_range": null,
"min_reading_range": 720,
"reading": 1680,
"reading_units": "RPM",
"serial_number": null,
"physical_context": "SystemBoard",
"state": "enabled",
"health": "ok"
},
"0x17||Fan.Embedded.2A@System.Embedded.1": {
"identity": "0x17||Fan.Embedded.2A",
"max_reading_range": null,
"min_reading_range": 720,
"reading": 3120,
"reading_units": "RPM",
"serial_number": null,
"physical_context": "SystemBoard",
"state": "enabled",
"health": "ok"
},
"0x17||Fan.Embedded.2B@System.Embedded.1": {
"identity": "0x17||Fan.Embedded.2B",
"max_reading_range": null,
"min_reading_range": 720,
"reading": 3000,
"reading_units": "RPM",
"serial_number": null,
"physical_context": "SystemBoard",
"state": "enabled",
"health": "ok"
}
},
"Temperature": {
"iDRAC.Embedded.1#SystemBoardInletTemp@System.Embedded.1": {
"identity": "iDRAC.Embedded.1#SystemBoardInletTemp",
"max_reading_range_temp": 47,
"min_reading_range_temp": -7,
"reading_celsius": 28,
"physical_context": "SystemBoard",
"sensor_number": 4,
"state": "enabled",
"health": "ok"
},
"iDRAC.Embedded.1#CPU1Temp@System.Embedded.1": {
"identity": "iDRAC.Embedded.1#CPU1Temp",
"max_reading_range_temp": 90,
"min_reading_range_temp": 3,
"reading_celsius": 63,
"physical_context": "CPU",
"sensor_number": 14,
"state": "enabled",
"health": "ok"
}
},
"Power": {
"PSU.Slot.1:Power@System.Embedded.1": {
"power_capacity_watts": null,
"line_input_voltage": 206,
"last_power_output_watts": null,
"serial_number": "CNLOD0075324D7",
"state": "enabled",
"health": "ok"
},
"PSU.Slot.2:Power@System.Embedded.1": {
"power_capacity_watts": null,
"line_input_voltage": null,
"last_power_output_watts": null,
"serial_number": "CNLOD0075324E5",
"state": null,
"health": "critical"
}
},
"Drive": {
"Solid State Disk 0:1:0:RAID.Integrated.1-1@System.Embedded.1": {
"name": "Solid State Disk 0:1:0",
"capacity_bytes": 479559942144,
"state": "enabled",
"health": "ok"
},
"Physical Disk 0:1:1:RAID.Integrated.1-1@System.Embedded.1": {
"name": "Physical Disk 0:1:1",
"capacity_bytes": 1799725514752,
"state": "enabled",
"health": "ok"
},
"Physical Disk 0:1:2:RAID.Integrated.1-1@System.Embedded.1": {
"name": "Physical Disk 0:1:2",
"capacity_bytes": 1799725514752,
"state": "enabled",
"health": "ok"
},
"Backplane 1 on Connector 0 of Integrated RAID Controller 1:RAID.Integrated.1-1@System.Embedded.1": {
"name": "Backplane 1 on Connector 0 of Integrated RAID Controller 1",
"capacity_bytes": null,
"state": "enabled",
"health": "ok"
}
}
}
},
"timestamp": "2023-10-22 15:50:36.700458"
}