Skip to navigation

Metrics, Health Checks, Enummetrics, And Actions

View as Markdown

This appendix describes the metrics (section G.1), health checks (section G.2), enummetrics (section 12.2.2), and actions (section G.4), along with their parameters, in a newly-installed cluster. Metrics, health checks, enummetrics, and actions can each be standalone scripts, or they can be built-ins. Standalone scripts can be those supplied with the system, or they can be custom scripts built by the administrator. Scripts often require environment variables (as described in section 3.3.1 of the Developer Manual). On success scripts must exit with a status of 0, as is the normal practice.

G.1 Metrics And Their Parameters

A list of metric names can be viewed, for example, for the head node, using cmsh as follows (section 12.5.3.1):

[basecm10 ~]# cmsh -c "monitoring measurable; list metric"

The metrics listed in this section are classed into 10 kinds:

  1. regular metrics (section G.1.1)

  2. NFS metrics (section G.1.2)

  3. InfiniBand metrics (section G.1.3)

  4. monitoring system metrics (section G.1.4)

  5. GPU metrics (section G.1.6)

  6. Job metrics (section G.1.8)

  7. IPMI metrics (section G.1.9)

  8. Redfish metrics (section G.1.10)

  9. SMART metrics (section G.1.11)

  10. Prometheus metrics (section G.1.12)

G.1.1 Regular Metrics

Table G.1.1: List Of Metrics
MetricDescription
AlertLevelIndicates the healthiness of a device based on severity of events (section 12.2.8). The lower it is, the better. There are 3 parameters it can take:
• count: the number of active triggers
• maximum: the maximum alert level of all active triggers
• sum: the summed alert level of all active triggers
BlockedProcessesBlocked processes waiting for I/O
BufferMemorySystem memory used for buffering
BytesRecv*,‡Bytes/s received
BytesSent*,‡Bytes/s sent
CPUGuest*CPU time spent in guest mode (Jiffies/s)
CPUIdle *CPU time spent in idle mode (Jiffies/s)
CPUIrq *CPU time spent in servicing IRQ (Jiffies/s)
CPUNice *CPU time spent in nice mode (Jiffies/s)
CPUSoftIrq *CPU time spent in servicing soft IRQ (Jiffies/s)
CPUSteal *CPU time spent in steal mode (Jiffies/s)
CPUSystem *CPU time spent in system mode (Jiffies/s)
CPUUser *CPU time spent in user mode (Jiffies/s)
CPUUsage *Percent of time not spent in idle mode (sum of non-idling percentages) (%/s)
CPUWait *CPU time spent in I/O wait mode (Jiffies/s).
CacheMemorySystem memory used for caching.
CoresNumber of cores for a node
CoresTotalTotal number of known cores for all nodes
CoresUpNumber of cores for all nodes marked as UP
CtxtSwitches*Context switches/s
DPUNodesClosedNumber of DPUs not marked as UP or DOWN
DPUNodesDownNumber of DPUs marked as DOWN
DPUNodesTotalTotal number of DPUs
DPUNodesUpNumber of DPUs not marked as UP or DOWN
DevicesClosedNumber of devices not marked as UP or DOWN
DevicesDownNumber of devices marked as DOWN
DevicesTotalTotal number of devices
DevicesUpNumber of devices in status UP. A node (head, regular, virtual, cloud) or GPU Unit is not classed as a device. A device can be an item such as a switch, PDU, chassis, or rack, if the item is enabled and configured for management.
DropRecv*,‡Packets/s received and dropped
DropSent*,‡Packets/s sent and dropped
EC2SpotPriceAmazon EC2 price for spot instances
EccDBitGPU**Total number of double bit ECC errors/s (file: sample_gpu)
EccSBitGPU**Total number of single bit ECC errors/s (file: sample_gpu)
ErrorsRecv*,‡Packets/s received with error
ErrorsSent*,‡Packets/s sent with error
FPGAsTotalTotal number of known FPGAs for all nodes
FPGAsUpNumber of FPGAs for all nodes marked as UP
FabricTopologiesNumber of fabric topologies
FabricTopologyHostUsageAverage usage of all topology hosts
FabricTopologyResourceBoxUsageAverage usage of all topology resource boxes
Forks*Forked processes/s
FrameErrors*,‡Packet framing errors/s
FreeFiles[§]Free file inodes on the specified mount point
FreeSpace[§]Free space for non-root user. Takes mount point as a parameter
GPUUnitsClosedNumber of GPU units not marked as UP or DOWN
GPUUnitsDownNumber of GPU units marked as DOWN
GPUUnitsTotalTotal number of GPU Units
GPUUnitsUpNumber of GPU units marked as UP
GPUsTotalTotal number of known GPUs for all nodes
GPUsUpNumber of GPUs for all nodes marked as UP
HardwareCorruptedMemoryHardware corrupted memory detected by ECC
IOInProgress[†]I/O operations in progress
IOTime*,†I/O operations time in milliseconds/s
Interrupts *System interrupts/s
IpForwDatagrams*Input IP datagrams/s to be forwarded/s
IpFragCreates*IP datagram fragments/s generated/s
IpFragFails*IP datagrams/s which needed to be fragmented but could not
IpFragOKs*IP datagrams/s successfully fragmented
IpInAddrErrors*Input datagrams/s discarded because the IP address in their header was not a valid address
IpInDelivers*Input IP datagrams/s successfully delivered
IpInDiscards*Input IP datagrams/s discarded
IpInHdrErrors*Input IP datagrams/s discarded due to errors in their IP headers
IpInReceives*Input IP datagrams/s, including ones with errors, received from all interfaces
IpInUnknownProtos*Input IP datagrams/s received but discarded due to an unknown or unsupported protocol
IpOutDiscards*Output IP datagrams/s discarded
IpOutNoRoutes*Output IP datagrams/s discarded because no route could be found
IpOutRequests*Output IP datagrams/s supplied to IP in requests for transmission
IpReasmOKs*IP datagrams/s successfully re-assembled
IpReasmReqds*IP fragments/s received needing re-assembly
JobsRunningJobs running on the node
LiteNodesClosedNumber of lite nodes not marked as UP or DOWN
LiteNodesDownNumber of lite nodes marked as DOWN
LiteNodesTotalTotal number of lite nodes
LiteNodesUpNumber of lite nodes marked as UP
LoadFifteenLoad average on 15 minutes
LoadFiveLoad average on 5 minutes
LoadOneLoad average on 1 minute
MajorPageFaults*Page faults/s that require I/O
ManagedServicesOkThis metric uses the ManagedServicesOk health check (here) for a grouping of nodes, such as the nodes in a category, or the nodes in a cluster. A parameter is specified for the metric, and a value is returned, as follows:
• fail: Total number of health checks in a FAIL state
• good: Percentage that are in the PASS state
• pass: Total number that are in the PASS state
• total: Total number of the ManagedServicesOk metrics being sampled, regardless of state
• unknown: Total number that are in the UNKNOWN state
ManagedSwitchesClosedNumber of managed switches not marked as UP or DOWN
ManagedSwitchesDownNumber of managed switches marked as DOWN
ManagedSwitchesTotalNumber of managed switches not marked as UP or DOWN
ManagedSwitchesUpTotal number of managed switches
MemoryAvailableAvailable system memory
MemoryFreeFree system memory
MemoryTotalTotal system memory
MemoryUsed[¶]Used system memory for a process specified as a parameter. Processes can be anything that is always running:
Example
• cm-lite-daemon
• cm-mqtt
• cmd
• mysqld
• promtail
• slurmctld
• slurmd
MemoryUtilizationMemory utilization
MergedReads*,†Merged reads/s
MergedWrites*,†Merged writes/s
NodesClosedNumber of nodes not marked as UP or DOWN
NodesDownNumber of nodes marked as DOWN
NodesTotalTotal number of nodes
NodesUpNumber of nodes in status UP
OccupationRateCluster occupation rate—a normalized cluster load percentage. 100% means all cores on all nodes are fully loaded.
The calculation is done as follows: LoadOne on each node is mapped to a value, calibrated so that LoadOne=1 corresponds to 100% per node. The maximum allowed for a node in the mapping is 100%. The average of these mappings taken over all nodes is the OccupationRate.
A high value can indicate the cluster is being used optimally. However, a value that is 100% most of the time suggests the cluster may need to be expanded.
PacketsRecv*,‡Packets/s received
PacketsSent*,‡Packets/s sent
PageFaults*Page faults/s
PageIn *Number of bytes the system has paged in from disk/s
PageOut *Number of bytes the system has paged out to disk/s
PageSwapIn *Number of bytes the system has swapped in from disk/s
PageSwapOut *Number of bytes the system has swapped out to disk/s
PDUBankLoadTotal PDU bank load, in amps
PDULoadTotal PDU phase load, in amps
PDUUptime*PDU uptime per second. I.e. ideally=1, but in practice has jitter effects.
PhaseLoadSum of PDULoad over all power distribution units
ProcessCountTotal number of all processes in the OS. These are running processes (RunningProcesses) and blocked processes(BlockedProcesses).
ReadOnly[§]Indicates if the specified mount point was mounted as read-only
ReadTime*,†Read time in milliseconds/s
Reads*,†Reads/s completed successfully
RunningProcessesRunning processes
ReportedSpeedSpeed reported by the port of the switch. The parameter name used is the hardware port name, as specified by the output of the switchoverview command. For example, for the Cumulus switch these can be swp0, swp1…
SectorsRead*,†Sectors/s read successfully/s
SectorsWritten*,†Sectors/s written successfully
SwapCachedCached swap memory
SwapFreeFree swap memory
SwapTotalTotal swap memory
SwapUsedUsed swap memory
SwapUtilizationSwap memory utilization
SystemTime[¶]System time used by process specified by a parameter, for example: cmd
SwitchBroadcastPackets*Total number of good packets received and directed to the broadcast address/s
SwitchCollisions*Collisions/s on this network segment
SwitchCPUUsageSwitch CPU utilization estimation (%)
SwitchDelayDiscardFrames*Frames discarded/s due to excessive transit delay through the bridge
SwitchFilterDiscardFrames*Valid frames received/s but discarded by the forwarding process
SwitchMTUDiscardFrames*Number of frames discarded/s due to an excessive size
SwitchMulticastPackets*Total number of good packets/s received and directed to a multicast address
SwitchOverSizedPackets*Well-received packets/s longer than 1518 octets
SwitchUnderSizedPackets*Packets/s received which are less than 64 octets long
SwitchUptime*Switch uptime per second. Ie, ideally=1, but in practice has jitter effects
TcpCurrEstabTCP connections that are either ESTABLISHED or CLOSE-WAIT
TcpInErrs*Input IP segments/s received in error
TcpRetransSegs*Total number of IP segments/s re-transmitted
ThreadsUsed[¶]Threads used by process. For example: cmd
TotalBytesRecvTotal bytes received on swp interfaces over all managed switches
TotalBytesSentTotal bytes sent on swp interfaces over all managed switches
TotalCPUIdleCluster-wide core usage in idle tasks (sum of all CPUIdle metric percentages)
TotalCPUPowerUsageTotal CPU power usage over all nodes
TotalCPUSystemCluster-wide core usage in system mode (sum of all CPUSystem metric percentages)
TotalCPUTemperatureAverage CPU temperature over all nodes
TotalCPUUserCluster-wide core usage in user mode (sum of all CPUUser metric percentages)
TotalCPUUtilizationSum of CPUUsage over all nodes
TotalGPUMemoryUtilizationAverage of GPU memory utilization percentage gpu_mem_utilization:average (table G.1.6) over all nodes
TotalGPUNvlinkBandwidthTotal GPU Nvlink bandwidth using gpu_nvlink_total_bandwidth:total (table G.1.6) over all nodes
TotalGPUPowerUsageTotal GPU power usage, using gpu_power_usage:total (table G.1.6) over all nodes
TotalGPUTemperatureAverage of average GPU temperature using gpu_temperature:average (table G.1.6) over all nodes
TotalGPUUtilizationAverage of GPU utilization using gpu_utilization:average (table G.1.6) over all nodes
TotalMemorySum of MemoryTotal over all nodes
TotalMemoryFreeCluster-wide total of memory free
TotalMemoryUsedCluster-wide total of memory used
TotalMemoryUtilizationSum of MemoryUtilization over all nodes
TotalNodePowerUsageTotal power usage over all nodes
TotalSwapSum of SwapTotal over all nodes
TotalSwapFreeCluster-wide total swap free
TotalSwapUsedCluster-wide total swap used
TotalUserTotal number of known users
TotalUserLoginTotal number of logged in users
UdpInDatagrams*Input UDP datagrams/s delivered to UDP users
UdpInErrors*Input UDP datagrams/s received that could not be delivered/s for other reasons (no port excl.)
UdpNoPorts*Received UDP datagrams/s for which there was no application at the destination port
UniqueUserLoginNumber of unique users logged in
UnmanagedNodesClosedNumber of unmanaged nodes not marked as UP or DOWN
UnmanagedNodesDownNumber of unmanaged nodes marked as DOWN
UnmanagedNodesTotalTotal number of unmanaged nodes
UnmanagedNodesUpNumber of unmanaged nodes marked as UP
Uptime*System uptime per second. Ie, ideally=1, but in practice has jitter effects
UsedFiles[§]Used file inodes on the specified parameter as mount point
UsedSpace[§]Used space on the specified parameter as mount point
UserTime[¶]User time used by specified process. For example: cmd
Utilization[¶]Utilization by specified process. For example; cmd
VirtualMemoryUsed[¶]Virtual memory used by specified process. For example cmd
WlmSlotsFreeThe number of WLM slots free
WlmSlotsTotalThe total number of WLM slots
WlmSlotsUsedThe number of WLM slots in use
WlmSlotsUtilizationThe percentage of WLM slots in use
wlm_slurm_state_countNumber of nodes in the state for a parameter. The possible parameters are:
• allocated
• completing
• down
• drain
• draining
• fail
• failing
• idle
• maint
• mixed
WriteTime*,†Write time in milliseconds/s (this is a per mille), for the parameter as device
Writes*,†Writes/s completed successfully for the parameter as device
isilon_node_disk_access_latencyIsilon access latency for node disk
isilon_node_disk_iosched_queueIsilon iosched queue for node disk
isilon_node_disk_xfer_size_inTransfer size in for node disk
isilon_node_disk_xfer_size_outTransfer size out for node disk
isilon_node_ipIP address of isilon node
isilon_in_rateBytes written to NFS client from Isilon
isilon_out_rateBytes read from Isilon to NFS client
isilon_op_rateI/O rate for NFS client to/from Isilon
node_network_carrier_changes_totalSamples total network carrier changes
nvidia_licensed_compute_resourcesTotal licensed compute resources
nvidia_used_compute_resourcesUsed compute resources, (maximum of nodes used and GPUs used, but value can only be up to the total licensed compute resources)
nvidia_used_gpu_resourcesUsed GPU resources
nvidia_used_node_resourcesUsed node resources
nvidia_used_node_resourcesUsed node resources

* Cumulative metric. I.e. the metric is derived from cumulative raw measurements taken at two different times, according to:

metric[time[2]] = ((measurement[2] - measurement[1]) / (time[2] - time[1]))

The metric is a “per second” measurement.

** Standalone scripts, not built-ins.

If sampling from a head node, the script is in directory: /cm/local/apps/cmd/scripts/metrics/

For regular nodes, the script is in directory: /cm/images/default-image/cm/local/apps/cmd/scripts/metrics/

† Takes block device name (sda, sdc, nvme0n1 and so on) as parameter

‡ Takes interface device name (eth0, eth1, en01, docker0, ib0 and so on) as parameter

§ Takes mount point (for example: /, or /var) as parameter

¶ Takes a process, eg: cmd as a parameter

G.1.2 NFS Metrics

The NFS metrics are all cumulative. They correspond to nfsstat output, and are shown in table G.1.2.

nfs_client_packet_packetsNFS client packets statistics: packets
nfs_client_packet_tcpNFS client package statistics: TCP/IP packets
nfs_client_packet_tcpconnNFS client package statistics: TCP/IP connections
nfs_client_packet_udpNFS client package statistics: UDP packets
nfs_client_rpc_authrefrshNFS Client RPC statistics: authenticated refreshes to RPC server
nfs_client_rpc_callsNFS Client RPC statistics: calls
nfs_client_rpc_retransNFS Client RPC statistics: re-transmissions
nfs_server_file_anonNFS Server file statistics: anonymous access
nfs_server_file_lookupNFS Server file statistics: look-ups
nfs_server_file_ncachedirNFS Server file statistics: ncachedir
nfs_server_file_staleNFS Server file statistics: stale files
nfs_server_packet_packetsNFS Server packet statistics: packets
nfs_server_packet_tcpNFS Server packet statistics: TCP/IP packets
nfs_server_packet_tcpconnNFS Server packet statistics: TCP/IP connections
nfs_server_packet_udpNFS Server packet statistics: UDP packets
nfs_server_reply_hitsNFS Server reply statistics: hits
nfs_server_reply_missesNFS Server reply statistics: misses
nfs_server_reply_nocacheNFS Server reply statistics: no cache
nfs_server_rpc_badauthNFS Server RPC statistics: bad authentication
nfs_server_rpc_badcallsNFS Server RPC statistics:bad RPC requests
nfs_server_rpc_badclntNFS Server RPC statistics: badclnt
nfs_server_rpc_callsNFS Server RPC statistics: all calls to NFS and NLM
nfs_server_rpc_xdrcallNFS Server RPC statistics: malformed XDR calls
nfs_v3_client_accessNFSv3 client statistics: access
nfs_v3_client_fsinfoNFSv3 client statistics: static file system information
nfs_v3_client_fsstatNFSv3 client statistics: dynamic file system status
nfs_v3_client_getattrNFSv3 client statistics: file system attributes
nfs_v3_client_lookupNFSv3 client statistics: lookup
nfs_v3_client_pathconfNFSv3 client statistics: configuration path
nfs_v3_client_readNFSv3 client statistics: reads
nfs_v3_client_totalNFSv3 client statistics: total
nfs_v3_server_accessNFSv3 server statistics: access
nfs_v3_server_createNFSv3 server statistics: create
nfs_v3_server_fsinfoNFSv3 server statistics: static file system information
nfs_v3_server_fsstatNFSv3 server statistics: dynamic file system information
nfs_v3_server_getattrNFSv3 server statistics: file system attributes gets
nfs_v3_server_lookupNFSv3 server statistics: file name look-ups
nfs_v3_server_mkdirNFSv3 server statistics: directory creation
nfs_v3_server_nullNFSv3 server statistics: null operations
nfs_v3_server_pathconfNFSv3 server statistics: retrieve POSIX information
nfs_v3_server_readNFSv3 server statistics: reads
nfs_v3_server_readdirplusNFSv3 server statistics: READDIRPLUS procedures
nfs_v3_server_readlinkNFSv3 server statistics: Symbolic link reads
nfs_v3_server_setattrNFSv3 server statistics: file system attribute sets
nfs_v3_server_totalNFSv3 server statistics: total
nfs_v3_server_writeNFSv3 server statistics: writes

G.1.3 InfiniBand Metrics

The available InfiniBand metrics are displayed in table G.1.3.

Table G.1.3: InfiniBand Metrics
InfiniBand MetricDescription
SymbolErrorCountTotal number of minor link errors detected on one or more physical lanes.
LinkErrorRecoveryCountTotal number of times the Port Training state machine has successfully completed the link error recovery process.
LinkDownedCounterTotal number of times the Port Training state machine has failed the link error recovery process and downed the link.
PortRcvErrorsTotal number of packets containing an error that were received on the port.
PortRcvRemotePhysicalErrorsTotal number of packets marked with the EBP delimiter received on the port.
PortRcvSwitchRelayErrorsTotal number of packets received on the port that were discarded because they could not be forwarded by the switch relay.
PortXmitDiscardsTotal number of outbound packets discarded by the port because the port is down or congested.
PortXmitConstrainErrorsTotal number of packets not transmitted from the switch physical port.
PortRcvConstraintErrorsTotal number of packets received on the switch physical port that are discarded.
LocalLinkIntegrityErrorsThe number of times that the count of local physical errors exceeded the threshold specified by LocalPhyErrors.
ExcessiveBufferOverrunErrorThe number of times that OverrunErrors consecutive flow control update periods occurred, each having at least one overrun error
QP1DroppedDrops on the lower priority QP1 interconnect
VL15DroppedDrops in the highest priority virtual lane 15
PortXmitDataTotal number of data octets, divided by 4 (lanes), transmitted on all VLs. This is a 64-bit counter.
PortRcvDataTotal number of data octets, divided by 4 (lanes), received on all VLs. This is a 64-bit counter.
PortXmitPktsTotal number of packets transmitted on all VLs from this port, including packets with errors, and excluding link packets.
PortRcvPktsTotal number of packets, including packets containing errors, and excluding link packets, received from all VLs on this port. This is a 64-bit counter.
PortXmitWaitThe number of ticks during which the port had data to transmit but no data was sent during the entire tick (either because of insufficient credits or because of lack of arbitration).

G.1.4 Monitoring System Metrics

Internal metrics for the monitoring system itself are produced by the MonitoringSystem data producer.

The data producer does not run by default on any node, as is seen by running the nodes command (here) for it:

[basecm10->monitoring->setup[MonitoringSystem]]% nodes
Not used

However, for convenience, some monitoring system metrics values are displayed on demand in an organized way, by running the monitoringinfo command for a device:

Example

[basecm10->device[basecm10]]% monitoringinfo
Service Queued Handled Cache miss Stopped Suspended Last operation
----------------------------- -------- ---------- ---------- --------- ---------- ---------------
Mon::CacheGather 4 910 4 no no Fri Oct 4 ...
Mon::DataConverter 0 0 0 no no -
Mon::DataProcessorEngine 0 155,470 0 no no Fri Oct 4 ...
Mon::DataProcessorKeepLatest 0 155,470 0 no no Fri Oct 4 ...
Mon::DataProcessorKeepRecent 0 0 0 no no -
...

The internal monitoring system metrics can be activated so that their data values are saved. This is not recommended, except temporarily for debugging purposes. To save the values, the Introspect flag for the monitoring system data producer should be set to yes:

Example

[basecm10->monitoring->setup[MonitoringSystem]]% set --extra Introspect yes
[basecm10->monitoring->setup*[MonitoringSystem*]]% commit
[basecm10->monitoring->setup[MonitoringSystem]]% nodes
basecm10
[basecm10->monitoring->setup[MonitoringSystem]]% get interval
900

After a time defined by interval, the metrics can be viewed:

Example

[basecm10->device[basecm10]]% latestmetricdata | grep Mon::Storage
Mon::Storage::Engine::elements Internal/Monitoring/Storage 999,549 44.3s
Mon::Storage::Engine::size Internal/Monitoring/Storage 1.00 GiB 44.3s
Mon::Storage::Engine::usage Internal/Monitoring/Storage 9.63% 44.3s
Mon::Storage::Message::elements Internal/Monitoring/Storage 28 44.3s
...

The monitoring system metrics that are saved are shown in table G.1.4.

Table G.1.4: Monitoring System Metrics
Monitoring System MetricDescription
Mon::CacheGather::handledCache gathers handled/s
Mon::CacheGather::missCache gathers missed/s
Mon::DataProcessor::handledData processors handled/s
Mon::DataProcessor::missData processors missed /s
Mon::DataTranslator::handledData translators handled/s
Mon::DataTranslator::missData translators missed/s
Mon::EntityMeasurableCache::handledMeasurable cache handled/s
Mon::EntityMeasurableCache::missMeasurable cache missed/s
Mon::MeasurableBroker::handledMeasurable broker handled/s
Mon::MeasurableBroker::missMeasurable broker missed/s
Mon::OOB::TaskService::handledOut-of-band task service handled/s
Mon::OOB::TaskService::missOut-of-band task service missed/s
Mon::Replicate::Collector::handledReplication collection handled/s
Mon::Replicate::Collector::missReplication collection missed/s
Mon::Replicate::Combiner::handledReplication combiner handled/s
Mon::Replicate::Combiner::missReplication combiner missed/s
Mon::RepositoryAllocator::handledRepository allocator handled/s
Mon::RepositoryAllocator::missRepository allocator missed/s
Mon::RepositoryTrim::handledRepository trim handled/s
Mon::RepositoryTrim::missRepository trim missed/s
Mon::Storage::Engine::elementsStorage engine data elements, in total
Mon::Storage::Engine::sizeStorage engine size, in bytes
Mon::Storage::Engine::usageStorage engine usage
Mon::Storage::Message::elements Storage message data elements, in total
Mon::Storage::Message::sizeStorage message size in bytes
Mon::Storage::Message::usageStorage message usage
Mon::Storage::RepositoryId::elementsStorage repository ID data elements, in total
Mon::Storage::RepositoryId::sizeStorage repository ID, size, in bytes
Mon::Storage::RepositoryId::usageRepository ID usage
Mon::TaskInitializer::handledTask initializer handled/s
Mon::TaskInitializer::missTask initializer missed/s
Mon::TaskSampler::handledTask sampler handled/s
Mon::TaskSampler::missTask sampler missed/s
Mon::Trigger::Actuator::handledTrigger actuators handled/s
Mon::Trigger::Actuator::missTrigger actuators missed/s
Mon::Trigger::Dispatcher::handledTrigger dispatchers handled/s
Mon::Trigger::Dispatcher::missTrigger dispatchers missed/s
Prometheus::DataTranslator::handledDataTranslator queries handled. The DataTranslator is a translation layer between PromQL format and BCM format sampling.
Prometheus::DataTranslator::missDataTranslator misses

G.1.5 CPU Metrics Sampled By The CPUSampler And GPUSampler

Some CPU metrics are sampled by the data producers CPUSampler and GPUSampler (table G.1.5):

Table G.1.5: CPU Metrics Sampled By The CPUSampler And GPUSampler
CPU MetricParameterDescription
cpu_core_clock_speed*cpu_core0CPU0 core clock speed
cpu_power_cap_enabled*cpu0CPU0 power capping enabled
cpu_power_cap_long_term_max_limit*cpu0Long term CPU0 power constraint
cpu_power_cap_long_term_time_window*cpu0Long term CPU0 power constraint time window
cpu_power_cap_short_term_max_limit*cpu0Short term CPU0 power constraint
cpu_power_cap_short_term_time_window*cpu0Short term CPU0 power constraint time window
cpu_power_limit*cpu0CPU0 power limit
cpu_power_usage*cpu0CPU0 power usage
cpu_power_usagetotalTotal CPU power usage
cpu_temperatureaverageAverage CPU temperature
cpu_temperature*cpu0CPU0 temperature
cpu_utilizationaverageAverage CPU utilization

* The number 0 in the parameter column can be replaced by the number associated with the core used. Thus:

cpu_core0 can be replaced by cpu_core1, cup_core2…

and

cpu0 can be replaced by cpu1, cpu2…

G.1.6 GPU Metrics

The data producer (section 12.2.10) for the GPU metrics of this section is GPUSampler.

There were GPU metrics described earlier on in table G.1.1. These were cluster overview metrics about GPUs, and were provided by the ClusterTotal data producer.

However, the NVIDIA GPU metrics of this section, as the GPUSampler data producer name suggests, is about gathering the sampled GPU data from the devices themselves.

There is also a separate section about job GPU metrics (section G.1.8.4, here), which uses the JobSampler data producer, and is about gathering the sampled job data from the GPU devices themselves.

The device parameter for the GPU metrics in this section, unless otherwise noted, specifies the device slot number that the GPU uses. The parameter takes the form gpu0, gpu1, and so on. It is appended to the metric with a colon character. For example, the gpu_ecc_dbe_agg metric, if used with gpu1, is specified as:

Example

gpu_ecc_dbe_agg:gpu1

Available GPU metrics for V100 and A100 GPUs are listed in table G.1.6. The available GPU health checks for V100 and A100 GPUs are listed in table G.2.2.

If the cluster has been configured with AMD GPUs (section 7.4 of the Installation Manual) then AMD GPU metrics become available. Metrics in the table that are also valid AMD GPU metrics are noted. Some metrics have been added and noted that are only valid for AMD GPUs.

Table G.1.6: GPU Metrics
GPU MetricDescription
gpu_dec_utilization*GPU decoding usage
gpu_ecc_dbe_aggTotal double bit aggregate ECC errors
gpu_ecc_dbe_volTotal double bit volatile ECC errors
gpu_ecc_sbe_aggTotal single bit aggregate ECC errors
gpu_ecc_sbe_volTotal single bit volatile ECC errors
gpu_enc_utilization*GPU encoding usage
gpu_enforced_power_limitGPU-enforced power limit
gpu_mem_clockGPU memory clock (also for AMD GPU)
gpu_mem_copy_utilization*Percentage of GPU memory copy used
gpu_mem_freeAmount of GPU free memory
gpu_mem_total**GPU framebuffer size (also for AMD GPU)
gpu_mem_used**Amount of GPU memory used (also for AMD GPU)
gpu_mem_utilization*GPU memory used percentage
gpu_memory_temp*GPU memory temperature (Celsius)
gpu_nvlink_total_bandwidth**Total NVLink bandwidth used
gpu_power_management_limitGPU power management limit
gpu_power_usage**GPU power usage (also for AMD GPU)
gpu_power_violation**Throttling duration due to power constraints
gpu_shutdown_tempGPU shutdown temperature (Celsius)
gpu_slowdown_tempGPU slowdown temperature (Celsius)
gpu_sm_clockGPU shader multiprocessor clock (also for AMD GPU)
gpu_temperature*GPU temperature (Celsius)
gpu_thermal_violation**Throttling duration due to thermal constraints
gpu_utilization[*]Average GPU utilization percentage
gpu_xid_errorThe value is the specific XID error

* Specified as average, or specified for a GPU.

For example, for the gpu_dec_utilization metric:

gpu_dec_utilization:average or gpu_dec_utilization:GPU0

** Specified as a total, or specified for a GPU.

For example, for the gpu_mem_total metric:

gpu_mem_total:total or gpu_mem_total:GPU0

G.1.7 GPU Profiling Metrics

The data producer (section 12.2.10) for the GPU profiling metrics of this section is GPUSampler.

The device parameter for the GPU profiling metrics in this section, unless otherwise noted, specifies the device slot number that the GPU uses. The parameter takes the form gpu0, gpu1, and so on. It is appended to the metric with a colon character. For example, the gpu_profiling_fp64_active metric, if used with gpu1, is specified as:

Example

gpu_profiling_fp64_active:gpu1

Available GPU profiling metrics for V100 and A100 GPUs are listed in table G.1.7.

Table G.1.7: GPU Profiling Metrics
GPU Profiling MetricDescription
gpu_profiling_dram_activeThe ratio of cycles the device memory interface is active sending or receiving data
gpu_profiling_fp16_activeRatio of cycles the fp16 pipe is active
gpu_profiling_fp32_activeRatio of cycles the fp32 pipe is active
gpu_profiling_fp64_activeRatio of cycles the fp64 pipe is active
gpu_profiling_graphics_engine_activeRatio of time the graphics engine is active. The graphics engine is active if a graphics/compute context is bound and the graphics pipe or compute pipe is busy
gpu_profiling_nvlink_readThe number of bytes of active NvLink rx (read) data including both header and payload
gpu_profiling_nvlink_transmitThe number of bytes of active NvLink tx (transmit) data including both header and payload
gpu_profiling_pcie_readThe number of bytes of active PCIe rx (read) data including both header and payload
gpu_profiling_pcie_transmitThe number of bytes of active PCIe tx (transmit) data including both header and payload
gpu_profiling_pipe_tensor_activeThe ratio of cycles the tensor (HMMA) pipe is active
gpu_profiling_sm_activeThe ratio of cycles an SM has at least 1 warp assigned
gpu_profiling_sm_occupancyThe ratio of cycles the tensor (HMMA) pipe is active

G.1.8 Job Metrics

Job metrics are introduced in section 13.1.

G.1.8.1 Basic Job Metrics

The following table lists some of the most useful job metrics that BCM can monitor and visualize. In the table, the text <device> denotes a block device name, such as sda.

On virtual machines, block device metrics may be unavailable because of virtualization.

Table G.1.8.1: Basic Job Metrics
Job MetricDescriptionCgroup Source File
blkio.time:<device>Time job had I/O access to deviceblkio.time_recursive
blkio.sectors:<device>Sectors transferred to or from specific devices by a cgroupblkio.sectors_recursive
blkio.io_service_read:<device>Bytes readblkio.io_service_bytes_recursive
blkio.io_service_write:<device>Bytes writtenblkio.io_service_bytes_recursive
blkio.io_service_sync:<device>Bytes transferred synchronouslyblkio.io_service_bytes_recursive
blkio.io_service_async:<device>Bytes transferred asynchronouslyblkio.io_service_bytes_recursive
blkio.io_wait_time_read:<device>Total time spent waiting for service in the scheduler queues for I/O read operationsblkio.io_wait_time_recursive
blkio.io_wait_time_write:<device>Total time spent waiting for service in the scheduler queues for I/O write operationsblkio.io_wait_time_recursive
blkio.io_wait_time_sync:<device>Total time spent waiting for service in the scheduler queues for I/O synchronous operationsblkio.io_wait_time_recursive
blkio.io_wait_time_async:<device>Total time spent waiting for service in the scheduler queues for I/O asynchronous operationsblkio.io_wait_time_recursive
cpuacct.usageTotal CPU time consumed by all job processescpuacct.usage
cpuacct.stat.userUser CPU time consumed by all job processescpuacct.stat
cpuacct.stat.systemSystem CPU time consumed by all job processescpuacct.stat
memory.usageTotal current memory usagememory.usage_in_bytes
memory.memsw.usageSum of current memory plus swap space usagememory.memsw.usage_in_bytes
memory.memsw.max_usageMaximum amount of memory and swap space usedmemory.memsw.max_usage_in_bytes
memory.failcntHow often the memory limit has reached the value set in memory.limit_in_bytesmemory.failcnt
memory.memsw.failcntHow often the memory plus swap space limit has reached the value set in memory.memsw.limit_in_bytesmemory.memsw.failcnt
memory.swapTotal swap usagememory
memory.cacheTotal page cache, including tmpfs (shmem)memory
memory.mapped_fileSize of memory-mapped mapped files, including tmpfs (shmem)memory
memory.unevictableMemory that cannot be reclaimedmemory

The third column in the table shows the precise source file name that is used when the value is retrieved. These files are all virtual files, and are created as the cgroup controllers are mounted to the cgroup directory. In this case several controllers are mounted to the same directory, which means that all the virtual files will show up in that directory, and in its associated subdirectories—job cgroup directories—when the job runs.

G.1.8.2 Advanced Job Metrics

The metrics in the preceding table are enabled by default. There are also over 40 other advanced metrics that can be enabled via the Enable Advanced Metrics property of the jobmetricsettings object:

[basecm10->monitoring->setup[JobSampler]->jobmetricsettings]% show
Parameter Value
-------------------------------- ------------------------------------------------
Enable Advanced Metrics no
Exclude Devices loop,sr
Exclude Metrics
Include Devices
Include Metrics
Revision
Sampling Type Both
[basecm10->monitoring->setup[JobSampler]->jobmetricsettings]% set enableadvancedmetrics yes
[basecm10->monitoring->setup*[JobSampler*]->jobmetricsettings*]% commit

The advanced job metrics are:

Table G.1.8.2: Advanced Job Metrics
Advanced Job MetricDescriptionCgroup Source File
blkio.io_service_time_read:<device>Total time between request dispatch and request completion according to CFQ scheduler for I/O read operationsblkio.io_service_time_recursive
blkio.io_service_time_write:<device>Total time between request dispatch and request completion according to CFQ scheduler for I/O write operationsblkio.io_service_time_recursive
blkio.io_service_time_sync:<device>Total time between request dispatch and request completion according to CFQ scheduler for I/O synchronous operationsblkio.io_service_time_recursive
blkio.io_service_time_async:<device>Total time between request dispatch and request completion according to CFQ scheduler for I/O asynchronous operationsblkio.io_service_time_recursive
blkio.io_serviced_read:<device>Read I/O operationsblkio.io_serviced_recursive
blkio.io_serviced_write:<device>Write I/O operationsblkio.io_serviced_recursive
blkio.io_serviced_sync:<device>Synchronous I/O operationsblkio.io_serviced_recursive
blkio.io_serviced_async:<device>Asynchronous I/O operationsblkio.io_serviced_recursive
blkio.io_merged_read:<device>Number of block I/Os (requests) merged into requests for I/O read operationsblkio.io_merged_recursive
blkio.io_merged_write:<device>Number of block I/Os (requests) merged into requests for I/O write operationsblkio.io_merged_recursive
blkio.io_merged_sync:<device>Number of block I/Os (requests) merged into requests for I/O synchronous operationsblkio.io_merged_recursive
blkio.io_merged_async:<device>Number of block I/Os (requests) merged into requests for I/O asynchronous operationsblkio.io_merged_recursive
blkio.io_queued_read:<device>Number of requests queued for I/O read operationsblkio.io_queued_recursive
blkio.io_queued_write:<device>Number of requests queued for I/O write operationsblkio.io_queued_recursive
blkio.io_queued_sync:<device>Number of requests queued for I/O synchronous operationsblkio.io_queued_recursive
blkio.io_queued_async:<device>Number of requests queued for I/O asynchronous operationsblkio.io_queued_recursive
memory.rssAnonymous and swap cache, not including tmpfs (shmem)memory
memory.pgpginNumber of pages paged into memorymemory
memory.pgpgoutNumber of pages paged out of memorymemory
memory.active_anonAnonymous and swap cache on active least-recently-used (LRU) list, including tmpfs (shmem)memory
memory.inactive_anonAnonymous and swap cache on inactive LRU list, including tmpfs (shmem)memory
memory.active_fileFile-backed memory on active LRU listmemory
memory.inactive_fileFile-backed memory on inactive LRU listmemory
memory.hierarchical\Memory limit for thememory
_memory_limitHierarchy that contains the memory cgroup of job
memory.hierarchical\Memory plus swap limit formemory
_memsw_limitHierarchy that contains the memory cgroup of job

G.1.8.3 Job Queue Metrics

Job queue metrics become available after workload manager jobs are run. They are produced by the JobQueueSampler data producer.

Table G.1.8.3: List Of Job Queue Metrics
MetricDescription
AvgJobDurationAverage job duration of current jobs
AvgJobStartDelayAverage job start delay of current jobs
CompletedJobsSuccessfully completed jobs
CoresInQueueCores in queue
CoresUPInQueueActive cores in queue
EstimatedDelayEstimated delay time to execute jobs
FailedJobsFailed completed jobs
JobThroughputAverage number of Jobs finished
NodesInQueueNumber of nodes in the queue
NodesUPInQueueActive nodes in queue
QueuedJobsQueued jobs
RunningJobsRunning jobs
RunningJobsMaxMaximal running jobs
RunningJobsUtilizationRunning jobs utilization

G.1.8.4 Job GPU Metrics

The GPU metrics of section G.1.6 have a GPUSampler data producer (section 12.2.10). As the name suggests, those metrics are about gathering the sampled GPU data from the devices themselves.

The job GPU metrics of this section have a JobSampler data producer. As the name suggests, these metrics are about gathering the sampled job data from the GPU devices themselves.

In other words, the job GPU metrics are essentially the same metrics as in the GPU metrics section, but are valid only for the job. This is reflected in their names, which are identical, except for the job_ prefix. Other differences of job GPU metrics in comparison with GPU metrics are that

  • they are sampled only on the node that hosts the GPUs on which the job ran, and do not take specific GPUs as a parameter.

  • the metrics are listed in the monitoring measurable mode of cmsh only after jobs have run on the GPUs.

Available job GPU metrics for V100 and A100 GPUs are listed in table G.1.8.4.

If the cluster has been configured with AMD GPUs (section 7.4 of the Installation Manual) then AMD job GPU metrics become available. Metrics in the table that are also valid AMD job GPU metrics are noted. Some metrics have been added and noted that are only valid for AMD GPUs.

Table G.1.8.4: Job GPU Metrics For Node
Job GPU MetricDescription For Job On Node
job_gpu_dec_utilizationGPU decoding usage
job_gpu_ecc_dbe_aggTotal double bit aggregate ECC errors
job_gpu_ecc_dbe_volTotal double bit volatile ECC errors
job_gpu_ecc_sbe_aggTotal single bit aggregate ECC errors
job_gpu_ecc_sbe_volTotal single bit volatile ECC errors
job_gpu_enc_utilizationGPU encoding usage
job_gpu_enforced_power_limitGPU-enforced power limit
job_gpu_mem_clockGPU memory clock (also for AMD GPU)
job_gpu_mem_copy_utilizationPercentage of GPU memory copy used
job_gpu_mem_freeAmount of GPU free memory
job_gpu_mem_totalGPU framebuffer size (also for AMD GPU)
job_gpu_mem_usedAmount of GPU memory used (also for AMD GPU)
job_gpu_mem_utilizationGPU memory used percentage
job_gpu_memory_tempGPU memory temperature
job_gpu_nvlink_total_bandwidthTotal NVLink bandwidth used
job_gpu_power_management_limitGPU power management limit
job_gpu_power_usageGPU power usage (also for AMD GPU)
job_gpu_power_violationThrottling duration due to power constraints
job_gpu_shutdown_tempGPU shutdown temperature
job_gpu_slowdown_tempGPU slowdown temperature
job_gpu_sm_clockGPU shader multiprocessor clock (also for AMD GPU)
job_gpu_temperatureGPU temperature
job_gpu_thermal_violationThrottling duration due to thermal constraints
job_gpu_utilizationGPU utilization (section 14.4.1)
job_gpu_wastedGPU wasted (section 14.4.1)
job_gpu_xid_errorThe value is the specific XID error

G.1.9 IPMI Metrics

The IPMI metrics correspond to metrics provided by the BMC devices. The metrics available depend on the manufacturer, and are detected by BCM. The metrics listed in the following table are a limited list of what may be detected on a system.

The data producer (section 12.2.10) for the IPMI metrics is the ipmi data producer.

Table G.1.9: IPMI Metrics
IPMI MetricDescription
Current_<number>**Current seen by BMC sensor <number>, in amps (file: sample_ipmi)
Exhaust_TempExhaust temperature, in Celsius
FETDRV_PGPowerEdge voltage sensor on IPMI board
Fan<number>_RPMRPM of Fan<number> as seen by BMC (file: sample_ipmi)
Fan_Redundancyfan redundancy status
Inlet_Temp**Inlet Temperature, in Celsius (file: sample_ipmi)
M01_VDDQ_PGPowerEdge CPU voltage sensor M01_VDDQ_PG
M01_VTT_PGPowerEdge CPU voltage sensor
M23_VDDQ_PGPowerEdge CPU voltage sensor
M23_VTT_PG PowerEdge CPU voltage sensor
NDC_PGPowerEdge system board voltage sensor
PFault_Fail_SafePowerEdge sensor
PLL_PGPowerEdge sensor
PS1_PG_FailPowerEdge sensor
PS2_PG_FailPowerEdge sensor
Pwr_ConsumptionPower consumed by BMC, in watts (file: sample_ipmi)
TempTemperature, in Celsius
VSA_PGPowerEdge voltage sensor
VTT_PGPowerEdge voltage sensor
Voltage_<number>**Voltage seen by BMC sensor number, in Volts (file: sample_ipmi)

** Standalone scripts, not built-ins.

If sampling from a head node, the script is in directory: /cm/local/apps/cmd/scripts/metrics/

For regular nodes, the script is in directory: /cm/images/default-image/cm/local/apps/cmd/scripts/metrics/

G.1.10 Redfish Metrics

By default Redfish metrics are sampled only when the BMC interface (section 3.7) starts with rf (e.g. rf0, rf1 etc). The Redfish metric sampler is enabled by setting userdefinedresources as follows:

Example

[basecm10->device[node001]]% set userdefinedresources redfish
[basecm10->device[node001]]% commit

G.1.10.1 Redfish Standalone Script Metrics

An example script that samples Redfish metrics is the standalone script /cm/images/default-image/cm/local/apps/cmd/scripts/metrics/sample_redfish:

Table G.1.10: Redfish Standalone Script Metrics
Redfish Standalone Script MetricsDescription
fan_speedSpeed of fan (RPM)
psu_powerThe average power supply unit power (W)
sensor_readingTemperature sensor reading (C)

G.1.10.2 Redfish Metrics From CMDaemon Built-in Sampling

CMDaemon built-in sampling also samples Redfish metrics from the hardware:

Example

[basecm10->device[node001]]% latestmetricdata | head -2; latestmetricdata | grep ^RF
Measurable Parameter Type Value ...
------------------------------------------------ --------- --------------------------------------- ---------
RF_Baseboard_0_PCB_0_Temp_0 reading Environmental/Redfish/Sensor reading 34 C
RF_Baseboard_0_PCB_1_Temp_0 reading Environmental/Redfish/Sensor reading 33.5 C
RF_Baseboard_0_PCB_2_Temp_0 reading Environmental/Redfish/Sensor reading 33 C
RF_Baseboard_0_StandbyHSC_0_Power_0 reading Environmental/Redfish/Sensor reading 34.746 W
RF_Baseboard_0_StandbyHSC_0_Temp_0 reading Environmental/Redfish/Sensor reading 33.4375 C
RF_C2C_0_Resource_MaxSpeed Environmental/Redfish/Port 0 B/s
RF_DIMM_Slot_AllowedSpeeds Environmental/Redfish/Memory no data
RF_DIMM_Slot_Capacity Environmental/Redfish/Memory 0 B
RF_DIMM_Slot_CapacityMiB Environmental/Redfish/Memory 0 B
RF_DIMM_Slot_Nvidia_RowRemappingFailed Environmental/Redfish/Memory 0
RF_GPU_0_DRAM_0_Memory_Metrics_Bandwidth Environmental/Redfish/Memorymetrics 0.0%
RF_GPU_0_DRAM_0_Memory_Metrics_CapacityUtilizat+ Environmental/Redfish/Memorymetrics 0.0%
RF_GPU_0_Processor_Metrics_Bandwidth Environmental/Redfish/Processormetrics 0.0%
RF_GPU_0_Processor_Metrics_LifeTime_Correctable+ Environmental/Redfish/Processormetrics 0
RF_GPU_0_Processor_Metrics_LifeTime_Uncorrectab+ Environmental/Redfish/Processormetrics 0
RF_GPU_0_Processor_Metrics_Nvidia_AccumulatedGP+ Environmental/Redfish/Processormetrics no data
RF_GPU_0_Processor_Metrics_Nvidia_AccumulatedSM+ Environmental/Redfish/Processormetrics no data
RF_GPU_0_Processor_Metrics_Nvidia_DMMAUtilizatio Environmental/Redfish/Processormetrics 0.0%
RF_GPU_0_Processor_Metrics_Nvidia_FP16Activity Environmental/Redfish/Processormetrics 0.0%

The preceding list is a truncated excerpt from an NVIDIA DGX GH200 system. The Redfish metrics that are available depend on the vendor and hardware.

G.1.11 SMART Metrics

The SMART metrics correspond to metrics provided by SMART hard drive implementation. The metrics available depend on the manufacturer, and are detected by BCM. The metrics listed in the following table are a limited list of what may be detected on a system.

A SMART metric takes a block device name (sda, sdc, nvme0n1 and so on) as a parameter. Some reported values, such as “spin up time” and “start/stop count” are not relevant on non-rotational (solid-state) drives.

The data producer (section 12.2.10) for SMART metrics is the smart data producer.

Table G.1.11: SMART Metrics
SMART MetricDescription
Command_TimeoutCommand timeout
Current_Pending_SectorCurrent pending sectors
Hardware_ECC_RecoveredHardware ECC recovered
Offline_UncorrectableUncorrectable sectors
Raw_Read_Error_RateRaw read error rate
Reallocated_Sector_CtReallocated sectors count
Reported_UncorrectReported uncorrectable errors
UDMA_CRC_Error_CountUDMA CRC errors

G.1.12 Prometheus Metrics

Prometheus metrics are introduced in section 14.2.

The data producers for Prometheus metrics are JobSampler, JobMetadataSampler, and some others.

Table G.1.12: Prometheus Metrics
Prometheus MetricDescription (for a job, unless asterisked)
job_blkio_io_mergedNumber of block I/Os (requests) merged into requests for I/O operations by a cgroup
job_blkio_io_queuedNumber of requests queued for I/O operations by a cgroup
job_blkio_io_service_bytesReports the number of bytes transferred to or from specific devices by a cgroup as seen by the CFQ scheduler
job_blkio_io_service_bytes_totalReports the number of bytes transferred to or from specific devices by a cgroup as seen by the CFQ scheduler (for all jobs)*
job_blkio_io_service_time_secondsReports the total time in seconds between request dispatch and request completion for I/O operations on specific devices by a cgroup as seen by the CFQ scheduler
job_blkio_io_servicedReports the number of I/O operations performed on specific devices by a cgroup as seen by the CFQ scheduler
job_blkio_io_wait_time_secondsReports the total time I/O operations on specific devices by a cgroup spent waiting for service in the scheduler queues
job_blkio_sectorsReports the number of sectors transferred to or from specific devices by a cgroup
job_blkio_time_secondsReports the time that a cgroup had I/O access to specific devices
job_cpuacct_stat_systemSystem CPU time consumed by processes
job_cpuacct_stat_userUser CPU time consumed by processes
job_cpuacct_usage_secondsCPU usage time consumed
job_memory_active_anon_bytesAnonymous and swap cache on active least-recently-used (LRU) list, including tmpfs (shmem), in bytes
job_memory_active_file_bytesFile-backed memory on active LRU list, in bytes
job_memory_cache_bytesPage cache, including tmpfs (shmem), in bytes
job_memory_failcntReports the number of times that the memory limit has reached the value set in memory.limit_in_bytes
job_memory_hierarchical_memory_limit_bytesMemory limit for the hierarchy that contains the memory cgroup, in bytes
job_memory_hierarchical_memsw_limit_bytesMemory plus swap limit for the hierarchy that contains the memory cgroup, in bytes
job_memory_inactive_anon_bytesAnonymous and swap cache on inactive LRU list, including tmpfs (shmem), in bytes
job_memory_inactive_file_bytesFile-backed memory on inactive LRU list, in bytes
job_memory_mapped_file_bytesSize of memory-mapped mapped files, including tmpfs (shmem), in bytes
job_memory_memsw_failcntReports the number of times that the memory plus swap space limit has reached the value set in memory.memsw.limit_in_bytes
job_memory_memsw_max_usage_bytesReports the maximum amount of memory and swap space used by processes in the cgroup, in bytes
job_memory_memsw_usage_bytesReports the sum of current memory usage plus swap space used by processes in the cgroup, in bytes
job_memory_pgpgin_bytesNumber of pages paged into memory
job_memory_pgpgout_bytesNumber of pages paged out of memory
job_memory_rss_bytesAnonymous and swap cache, not including tmpfs (shmem), in bytes
job_memory_swap_bytesSwap usage, in bytes
job_memory_unevictable_bytesMemory that cannot be reclaimed, in bytes,
job_memory_usage_bytesReports the total current memory usage by processes in the cgroup, in bytes
job_memory_usage_bytes_totalReports the total current memory usage by processes in the cgroup, in bytes (for all jobs)*
job_metadata_allocated_cpu_coresCPU cores used by a job by the user
job_metadata_allocated_gpusGPUs used by a job by the user
job_metadata_is_runningReturns 1 if the job metadata sampler is running a job
job_metadata_is_waitingReturns 1 if the job metadata sampler is waiting
job_metadata_num_cpusNumber of CPUs that the job runs on
job_metadata_num_nodesNumber of nodes that the job runs on
job_metadata_pending_jobsNumber of pending jobs for the user
job_metadata_running_jobsNumber of running jobs for the user
job_metadata_running_secondsTime the job has run
job_metadata_waiting_secondsTime the job has been waiting to run
users_job_effective_cpu_seconds:1wCPU seconds used by users over the past week*
users_job_running_count:1wNumber of jobs run by users over the past week*
users_job_waiting_seconds:1wTime users have been waiting for jobs to run over the past week*
users_job_wall_clock_seconds:1wTime the jobs runs for users according to wall time over the past week*
users_job_wasted_cpu_seconds:1wCPU time wasted during users jobs over the past week*

* total in the past 7x24x60x60 seconds, as measured at the time of sampling

G.1.13 NetQ Metrics

NetQ metrics (table G.1.13) are metrics sourced from NetQ. Configuring NetQ with BCM is described in section 3.11.

The data producer (section 12.2.10) for NetQ metrics is the netq data producer.

Table G.1.13: NetQ Metrics
NetQ MetricDescription
NetQ_node_fan_speedFan speed (RPM)
NetQ_node_nvlink_rx_all_flitsNVLink packets received, control and data (FLITs/s)
NetQ_node_nvlink_rx_data_flitsNVLink packets received, data (FLITs/s)
NetQ_node_nvlink_tx_all_flitsNVLink packets sent, control and data (FLITs/s)
NetQ_node_nvlink_tx_data_flitsNVLink packets sent, data (FLITs/s)
NetQ_node_PSU_power_inputPower supply power input (W)
NetQ_node_PSU_power_outputPower supply power output (W)
NetQ_node_PSU_voltage_inputPower supply voltage input (V)
NetQ_node_PSU_voltage_outputPower supply voltage output (V)
NetQ_node_Temp_sensorTemperature sensor value (C)

NetQ health checks are covered in section G.2.4.

G.1.14 Kubernetes Metrics

Configuring Kubernetes with BCM is described in Chapter 4 of the Containerization Manual.

There were cluster Kubernetes metrics described earlier on in table G.1.1. Those were overview metrics about Kubernetes.

The Kubernetes metrics in the following table G.1.14 are state metrics sourced from Kubernetes itself. The data producer (section 12.2.10) for the Kubernetes metrics of this section is kubestatemetrics.

The metrics that are not tagged as [STABLE] are experimental, and may change in behavior during Kubernetes updates.

Table G.1.14: Kubernetes Metrics
Kubernetes MetricDescription
kube_configmap_annotationsKubernetes annotations converted to Prometheus labels.
kube_configmap_created[STABLE] Unix creation timestamp
kube_configmap_info[STABLE] Information about configmap.
kube_configmap_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_configmap_metadata_resource_versionResource version representing a specific version of the configmap.
kube_cronjob_annotationsKubernetes annotations converted to Prometheus labels.
kube_cronjob_created[STABLE] Unix creation timestamp
kube_cronjob_info[STABLE] Info about cronjob.
kube_cronjob_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_cronjob_metadata_resource_version[STABLE] Resource version representing a specific version of the cronjob.
kube_cronjob_next_schedule_time[STABLE] Next time the cronjob should be scheduled. The time after lastScheduleTime, or after the cron job’s creation time if it’s never been scheduled. Use this to determine if the job is delayed.
kube_cronjob_spec_failed_job_history_limitFailed job history limit tells the controller how many failed jobs should be preserved.
kube_cronjob_spec_successful_job_history_ limitSuccessful job history limit tells the controller how many completed jobs should be preserved.
kube_cronjob_spec_suspend[STABLE] Suspend flag tells the controller to suspend subsequent executions.
kube_cronjob_status_active[STABLE] Active holds pointers to currently running jobs.
kube_cronjob_status_last_schedule_time[STABLE] LastScheduleTime keeps information of when was the last time the job was successfully scheduled.
kube_cronjob_status_last_successful_timeLastSuccessfulTime keeps information of when was the last time the job was completed successfully.
kube_daemonset_annotationsKubernetes annotations converted to Prometheus labels.
kube_daemonset_created[STABLE] Unix creation timestamp
kube_daemonset_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_daemonset_metadata_generation[STABLE] Sequence number representing a specific generation of the desired state.
kube_daemonset_status_current_number_ scheduled[STABLE] The number of nodes running at least one daemon pod and are supposed to.
kube_daemonset_status_desired_number_ scheduled[STABLE] The number of nodes that should be running the daemon pod.
kube_daemonset_status_number_available[STABLE] The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available
kube_daemonset_status_number_misscheduled[STABLE] The number of nodes running a daemon pod but are not supposed to.
kube_daemonset_status_number_ready[STABLE] The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.
kube_daemonset_status_number_unavailable[STABLE] The number of nodes that should be running the daemon pod and have none of the daemon pod running and available
kube_daemonset_status_observed_generation[STABLE] The most recent generation observed by the daemon set controller.
kube_daemonset_status_updated_number_ scheduled[STABLE] The total number of nodes that are running updated daemon pod
kube_deployment_annotationsKubernetes annotations converted to Prometheus labels.
kube_deployment_created[STABLE] Unix creation timestamp
kube_deployment_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_deployment_metadata_generation[STABLE] Sequence number representing a specific generation of the desired state.
kube_deployment_spec_paused[STABLE] Whether the deployment is paused and will not be processed by the deployment controller.
kube_deployment_spec_replicas[STABLE] Number of desired pods for a deployment.
kube_deployment_spec_strategy_ rollingupdate_max_surge[STABLE] Maximum number of replicas that can be scheduled above the desired number of replicas during a rolling update of a deployment.
kube_deployment_spec_strategy_ rollingupdate_max_unavailable[STABLE] Maximum number of unavailable replicas during a rolling update of a deployment.
kube_deployment_status_condition[STABLE] The current status conditions of a deployment.
kube_deployment_status_observed_generation[STABLE] The generation observed by the deployment controller.
kube_deployment_status_replicas[STABLE] The number of replicas per deployment.
kube_deployment_status_replicas_available[STABLE] The number of available replicas per deployment.
kube_deployment_status_replicas_ready[STABLE] The number of ready replicas per deployment.
kube_deployment_status_replicas_unavailable[STABLE] The number of unavailable replicas per deployment.
kube_deployment_status_replicas_updated[STABLE] The number of updated replicas per deployment.
kube_endpoint_address[STABLE] Information about Endpoint available and non available addresses.
kube_endpoint_address_available(Deprecated since v2.6.0) Number of addresses available in endpoint.
kube_endpoint_address_not_ready(Deprecated since v2.6.0) Number of addresses not ready in endpoint.
kube_endpoint_annotationsKubernetes annotations converted to Prometheus labels.
kube_endpoint_created[STABLE] Unix creation timestamp
kube_endpoint_info[STABLE] Information about endpoint.
kube_endpoint_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_endpoint_ports[STABLE] Information about the Endpoint ports.
kube_ingress_annotationsKubernetes annotations converted to Prometheus labels.
kube_ingress_created[STABLE] Unix creation timestamp
kube_ingress_info[STABLE] Information about ingress.
kube_ingress_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_ingress_metadata_resource_versionResource version representing a specific version of ingress.
kube_ingress_path[STABLE] Ingress host, paths and backend service information.
kube_job_annotationsKubernetes annotations converted to Prometheus labels.
kube_job_complete[STABLE] The job has completed its execution.
kube_job_created[STABLE] Unix creation timestamp
kube_job_info[STABLE] Information about job.
kube_job_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_job_owner[STABLE] Information about the Job’s owner.
kube_job_spec_completions[STABLE] The desired number of successfully finished pods the job should be run with.
kube_job_spec_parallelism[STABLE] The maximum desired number of pods the job should run at any given time.
kube_job_status_active[STABLE] The number of actively running pods.
kube_job_status_completion_time[STABLE] CompletionTime represents time when the job was completed.
kube_job_status_failed[STABLE] The number of pods which reached Phase Failed and the reason for failure.
kube_job_status_start_time[STABLE] StartTime represents time when the job was acknowledged by the Job Manager.
kube_job_status_succeeded[STABLE] The number of pods which reached Phase Succeeded.
kube_lease_ownerInformation about the Lease’s owner.
kube_lease_renew_timeKube lease renew time.
kube_mutatingwebhookconfiguration_createdUnix creation timestamp.
kube_mutatingwebhookconfiguration_infoInformation about the MutatingWebhookConfiguration.
kube_mutatingwebhookconfiguration_ metadata_resource_versionResource version representing a specific version of the MutatingWebhookConfiguration.
kube_mutatingwebhookconfiguration_ webhook_clientconfig_serviceService used by the apiserver to connect to a mutating webhook.
kube_namespace_annotationsKubernetes annotations converted to Prometheus labels.
kube_namespace_created[STABLE] Unix creation timestamp
kube_namespace_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_namespace_status_conditionThe condition of a namespace.
kube_namespace_status_phase[STABLE] kubernetes namespace status phase.
kube_node_annotationsKubernetes annotations converted to Prometheus labels.
kube_node_created[STABLE] Unix creation timestamp
kube_node_info[STABLE] Information about a cluster node.
kube_node_labels[STABLE] Kubernetes labels converted to Prometheus labels.
kube_node_roleThe role of a cluster node.
kube_node_spec_taint[STABLE] The taint of a cluster node.
kube_node_spec_unschedulable[STABLE] Whether a node can schedule new pods.
kube_node_status_allocatable[STABLE] The allocatable for different resources of a node that are available for scheduling.
kube_node_status_capacity[STABLE] The capacity for different resources of a node.
kube_node_status_condition[STABLE] The condition of a cluster node.
kube_pod_completion_time[STABLE] Completion time in unix timestamp for a pod.
kube_pod_container_info[STABLE] Information about a container in a pod.
kube_pod_container_resource_limitsThe number of requested limit resource by a container. It is recommended to use the kube_pod_resource_limits metric exposed by kube-scheduler instead, as it is more precise.
kube_pod_container_resource_requestsThe number of requested request resource by a container. It is recommended to use the kube_pod_resource_requests metric exposed by kube-scheduler instead, as it is more precise.
kube_pod_container_state_started[STABLE] Start time in unix timestamp for a pod container.
kube_pod_container_status_last_terminated_ exitcodeDescribes the exit code for the last container in terminated state.
kube_pod_container_status_last_terminated_ reasonDescribes the last reason the container was in terminated state.
kube_pod_container_status_ready[STABLE] Describes whether the containers readiness check succeeded.
kube_pod_container_status_restarts_total[STABLE] The number of container restarts per container.
kube_pod_container_status_running[STABLE] Describes whether the container is currently in running state.
kube_pod_container_status_terminated[STABLE] Describes whether the container is currently in terminated state.
kube_pod_container_status_terminated_ reasonDescribes the reason the container is currently in terminated state.
kube_pod_container_status_waiting[STABLE] Describes whether the container is currently in waiting state.
kube_pod_container_status_waiting_ reason[STABLE] Describes the reason the container is currently in waiting state.
kube_pod_created[STABLE] Unix creation timestamp
kube_pod_deletion_timestampUnix deletion timestamp
kube_pod_info[STABLE] Information about pod.
kube_pod_init_container_info[STABLE] Information about an init container in a pod.
kube_pod_init_container_resource_limitsThe number of requested limit resource by an init container.
kube_pod_init_container_resource_requestsThe number of requested request resource by an init container.
kube_pod_init_container_status_last_ terminated_reasonDescribes the last reason the init container was in terminated state.
kube_pod_init_container_status_ready[STABLE] Describes whether the init containers readiness check succeeded.
kube_pod_init_container_status_restarts_ total[STABLE] The number of restarts for the init container.
kube_pod_init_container_status_running[STABLE] Describes whether the init container is currently in running state.
kube_pod_init_container_status_terminated[STABLE] Describes whether the init container is currently in terminated state.
kube_pod_init_container_status_terminated_ reasonDescribes the reason the init container is currently in terminated state.
kube_pod_init_container_status_waiting[STABLE] Describes whether the init container is currently in waiting state.
kube_pod_init_container_status_waiting_ reasonDescribes the reason the init container is currently in waiting state.
kube_pod_ipsPod IP addresses
kube_pod_owner[STABLE] Information about the Pod’s owner.
kube_pod_restart_policy[STABLE] Describes the restart policy in use by this pod.
kube_pod_service_accountThe service account for a pod.
kube_pod_start_time[STABLE] Start time in unix timestamp for a pod.
kube_pod_status_container_ready_timeReadiness achieved time in unix timestamp for a pod containers.
kube_pod_status_initialized_timeInitialized time in unix timestamp for a pod.
kube_pod_status_phase[STABLE] The pods current phase.
kube_pod_status_qos_classThe pods current qosClass.
kube_pod_status_ready[STABLE] Describes whether the pod is ready to serve requests.
kube_pod_status_ready_timeReadiness achieved time in unix timestamp for a pod.
kube_pod_status_reasonThe pod status reasons
kube_pod_status_scheduled[STABLE] Describes the status of the scheduling process for the pod.
kube_pod_status_scheduled_time[STABLE] Unix timestamp when pod moved into scheduled status
kube_pod_tolerationsInformation about the pod tolerations
kube_poddisruptionbudget_annotationsKubernetes annotations converted to Prometheus labels.
kube_poddisruptionbudget_created[STABLE] Unix creation timestamp
kube_poddisruptionbudget_labelsKubernetes labels converted to Prometheus labels.
kube_poddisruptionbudget_status_current_ healthy[STABLE] Current number of healthy pods
kube_poddisruptionbudget_status_desired_ healthy[STABLE] Minimum desired number of healthy pods
kube_poddisruptionbudget_status_expected_ pods[STABLE] Total number of pods counted by this disruption budget
kube_poddisruptionbudget_status_observed_ generation[STABLE] Most recent generation observed when updating this PDB status
kube_poddisruptionbudget_status_pod_ disruptions_allowed[STABLE] Number of pod disruptions that are currently allowed
kube_replicaset_created[STABLE] Unix creation timestamp
kube_replicaset_metadata_generation[STABLE] Sequence number representing a specific generation of the desired state.
kube_replicaset_owner[STABLE] Information about the ReplicaSet’s owner.
kube_replicaset_spec_replicas[STABLE] Number of desired pods for a ReplicaSet.
kube_replicaset_status_fully_labeled_ replicas[STABLE] The number of fully labeled replicas per ReplicaSet.
kube_replicaset_status_observed_generation[STABLE] The generation observed by the ReplicaSet controller.
kube_replicaset_status_ready_replicas[STABLE] The number of ready replicas per ReplicaSet.
kube_replicaset_status_replicas[STABLE] The number of replicas per ReplicaSet.
kube_replicationcontroller_created[STABLE] Unix creation timestamp
kube_replicationcontroller_metadata_ generation[STABLE] Sequence number representing a specific generation of the desired state.
kube_replicationcontroller_ownerInformation about the ReplicationController’s owner.
kube_replicationcontroller_spec_replicas[STABLE] Number of desired pods for a ReplicationController.
kube_replicationcontroller_status_ available_replicas[STABLE] The number of available replicas per ReplicationController.
kube_replicationcontroller_status_fully_ labeled_replicas[STABLE] The number of fully labeled replicas per ReplicationController.
kube_replicationcontroller_status_ observed_generation[STABLE] The generation observed by the ReplicationController controller.
kube_replicationcontroller_status_ready_ replicas[STABLE] The number of ready replicas per ReplicationController.
kube_replicationcontroller_status_replicas[STABLE] The number of replicas per ReplicationController.
kube_resourcequota[STABLE] Information about resource quota.
kube_resourcequota_created[STABLE] Unix creation timestamp
kube_secret_created[STABLE] Unix creation timestamp
kube_secret_info[STABLE] Information about secret.
kube_secret_metadata_resource_versionResource version representing a specific version of secret.
kube_secret_type[STABLE] Type about secret.
kube_service_created[STABLE] Unix creation timestamp
kube_service_info[STABLE] Information about service.
kube_service_spec_type[STABLE] Type about service.
kube_statefulset_created[STABLE] Unix creation timestamp
kube_statefulset_metadata_generation[STABLE] Sequence number representing a specific generation of the desired state for the StatefulSet.
kube_statefulset_persistentvolumeclaim_ retention_policyCount of retention policy for StatefulSet template PVCs
kube_statefulset_replicas[STABLE] Number of desired pods for a StatefulSet.
kube_statefulset_status_current_revision[STABLE] Indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).
kube_statefulset_status_observed_ generation[STABLE] The generation observed by the StatefulSet controller.
kube_statefulset_status_replicas[STABLE] The number of replicas per StatefulSet.
kube_statefulset_status_replicas_availableThe number of available replicas per StatefulSet.
kube_statefulset_status_replicas_current[STABLE] The number of current replicas per StatefulSet.
kube_statefulset_status_replicas_ready[STABLE] The number of ready replicas per StatefulSet.
kube_statefulset_status_replicas_updated[STABLE] The number of updated replicas per StatefulSet.
kube_statefulset_status_update_revision[STABLE] Indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
kube_storageclass_created[STABLE] Unix creation timestamp
kube_storageclass_info[STABLE] Information about storageclass.
kube_validatingwebhookconfiguration_createdUnix creation timestamp.
kube_validatingwebhookconfiguration_infoInformation about the ValidatingWebhookConfiguration.
kube_validatingwebhookconfiguration_ metadata_resource_versionResource version representing a specific version of the ValidatingWebhookConfiguration.
kube_validatingwebhookconfiguration_ webhook_clientconfig_serviceService used by the apiserver to connect to a validating webhook.

G.1.15 Parameters For Metrics

Metrics have the parameters indicated by the left column in the following example:

Example

[basecm10->monitoring->measurable[CPUUser]]% show
Parameter Value
----------------------- ----------------------------
Class CPU
Consolidator default (ProcStat)
Cumulative yes
Description CPU time spent in user mode
Disabled no (ProcStat)
Gap 0 (ProcStat)
Maximal age 0s (ProcStat)
Maximal samples 4,096 (ProcStat)
Maximum 0
Minimum 0
Name CPUUser
Parameter
Producer ProcStat
Revision
Type Metric
Unit Jiffies/s

If the value is inherited from the producer, then it is shown in parentheses next to the value. An inherited value can be overwritten by setting it directly for the parameter of a measurable.

The meanings of the parameters are:

Class: A choice assigned to a metric. It can be an internal type, or it can be a standalone class type. A slash (/) is used to separate class levels. A partial list of the class values is:

  • CPU: CPU-related

  • Disk: Disk-related

  • Disk/Smart: SMART Disk-related

  • Fabric: Fabric-related

  • GPU: GPU-related

  • Internal: An internal metric

  • Job: Job metric

  • License: License-related

  • Memory: Memory-related

  • Network: Network-related

  • OS: Operating-system-related

  • Process: Process-related

  • Prometheus: Prometheus-related

  • Total: Total cluster-wide-related

  • Workload: Workload-related

  • Environmental: Environmental-related

Consolidator: This is described in detail in sections 12.4.3 and 12.5.2

Cumulative: If set to no, then the raw value is treated as not cumulative (for example, CoresUp), and the raw value is presented as the metric value.

If set to yes, then the metric is treated as being cumulative, which means that a rate (per second) value is presented.

More explicitly: When set to yes, it means that the raw sample used to calculate the metric is expected to be cumulative, like, for example, the bytes-received counter for an Ethernet interface. This in turn means that the metric is calculated from the raw value by taking the difference in raw sample measurement values, and dividing it by the time period over which the raw values are sampled. Thus, for example:

  • The bytes-received raw measurements, which accumulate as the packets are received, and are in bytes, and have Cumulative set to yes, and then have a corresponding metric, BytesRecv, with a value in bytes/second.

  • The system uptime raw measurements, which accumulate at the rate of 1 second per second, and are in seconds, have Cumulative set to yes, and have a corresponding metric, Uptime, with a value that uses no units. Ideally, the metric has a value of 1, but in practice the measured value varies a little due to jitter.

Description: Description of the raw measurement used by the metric. Empty by default.

Disabled: If set to no (default) then the metric runs.

Gap: The number of samples that are allowed to be missed before a value of NaN is set for the value of the metric.

Maximal age: the maximum age of RLE samples that are kept. If Maximal age is set to 0 then the sample age is not considered. Units can be w, d, h, m, s (weeks, days, hours, minutes, seconds), with s as the default.

Maximal samples: the maximum number of RLE samples that are kept. If Maximal samples is set to 0 then the number of samples is not considered.

Maximum: the value that the y-axis maximum takes in graphs plotted in Base View by default. If the maximum of the y-values is more than the default y-axis maximum value, then the maximum of the y-values becomes the y-axis maximum.

Minimum: the value that the y-axis minimum takes in graphs plotted in Base View by default. If the minimum of the y-values is less than the default y-axis minimum value, then the minimum of the y-values becomes the y-axis minimum.

NOTE: To clarify the Maximum and Minimum concepts, a case can be considered where minimum=0, maximum=3 are set. If a data point with a y-value of 2 is plotted on a graph, then the y-axis spans the range from 0 to 3 by default. However

  • if the data point has a y-value of 4 instead, then it means the y-axis maximum of 3 is re-sized from its default of 3 to the value of 4, so that the y-axis now spans from 0 to 4.

  • if the data point has a y-value of -1 instead, then it means the y-axis minimum of 0 is re-sized from its default of 0 to the value of -1, so that the y-axis now spans from -1 to 3.

Name: The name given to the metric.

Parameter: Parameter used for this metric. For example, eth0 with the metric BytesRecv

Producer: The data producer that produces the metric

Revision: User-definable revision number for the object

Type: This can be one of metric, healthcheck, or enummetric

Unit: A unit for the metric. For example: B/s (bytes/second) for BytesRecv metric, or unit-less for the Uptime metric. A percent is indicated with %

G.2 Health Checks And Their Parameters

A list of health checks can be viewed, for example, for the head node, using cmsh as follows (section 12.5.3.1):

[basecm10 ~]# cmsh -c "monitoring measurable; list healthcheck"

The health checks listed in this section are classed into 4 kinds:

  1. Regular health checks (section 12.2.4) are listed and described in section G.2.1.

  2. GPU health checks (section G.2.2)

  3. Redfish health checks (section G.2.3)

  4. NetQ health checks (section G.2.4)

G.2.1 Regular Health Checks

Table G.2.1: List Of Health Checks
NameQuery (script response is PASS/FAIL)
ManagedServicesOk*Are CMDaemon-monitored services all OK? If the response is FAIL, then at least one of the services being monitored is failing. The latesthealtdata -v command (section 12.6.3) should show which one(s). After correcting the problem with the service, a reset of the service is normally carried out (section 3.14, here). There is also a related ManagedServicesOk metric here.
Mon::StorageIs space available for the monitoring system metrics (section G.1.4)?
chrootprocessAre there daemon processes running using chroot in software images? Here: yes = FAIL. On failure, kill cron daemon processes running in the software images.
cm-chroot-sw-imgAre there dangling mounts left behind of images created by cm-chroot-sw-img? Here: yes = FAIL. The cluster administrator is expected to inspect and unmount the dangling mounts.
cmha-statusAre both head nodes up and running?
beegfsIs BeeGFS properly connected as expected to all the nodes? Unreachable nodes and failed routes are listed in InfoMessages.
cmsh *Is cmsh available?
cuda-dcgmIs cuda-dcgm available?
defaultgatewayIs there a default gateway available?
dellnssIf running, is the Dell NFS Storage Solution healthy?
diskspaceIs there less local disk space available to non-root users than any of the space parameters specified? *The space parameters can be specified as MB, GB, TB, or as percentages with %. The default severity of notices from this check is 10, when one space parameter is used. For more than one space parameter, the severity decreases by 10 for each space parameter, sequentially, down to 10 for the last space parameter. By default a space parameter of 10% is assumed. Another, also optional, non-space parameter, the filesystem mount point parameter, can be specified after the last space parameter to track filesystem space, instead of disk space. A metric-based alternative to tracking filesystem space changes is to use the built-in metric freespace (here) instead.*
Examples:
• diskspace 10% less than 10% space = FAIL, severity 10
• diskspace 10% 20% 30% less than 30% space = FAIL, with severity levels as indicated:
• diskspace 10GB 20GB less than 20GB space = FAIL, severity 10 less than 10GB space = FAIL, severity 20
• diskspace 10% 20% /var For the filesystem /var: less than 20% space = FAIL, severity 10 less than 10% space = FAIL, severity 20
dmesgIs dmesg output OK? *Regexes to parse the output can be constructed in the configuration file at /cm/local/apps/cmd/scripts/healthchecks/configfiles/dmesg.py*
dockerIs Docker running OK? Checks for Docker server availability and corruption, dead containers, proper endpoints
dockerregistryIs the Docker registry running OK? Checks registry endpoint and registry availability
exportsAre all filesystems as defined by the cluster management system exported?
etcdAre the core etcd processes of Kubernetes running OK? Checks endpoints and interfaces
failedprejobAre there failed prejob health checks (section 7.8.2)? Here: yes = FAIL. By default, the job ID is saved under /cm/local/apps/<scheduler>/var/:
• On FAIL, in failedprejobs.
• On PASS, in allprejobs The maximum number of IDs stored is 1000 by default. The maximum period for which the IDs are stored is 30 days by default. Both these maxima can be set with the failedprejob health check script.
hpraidAre the HP Smart Array controllers OK?
ibIs the InfiniBand Host Channel Adapter working properly? *A configuration file for this health check is at /cm/local/apps/cmd/scripts/healthchecks/configfiles/ib.py*
interfacesAre the interfaces up and running at full speed?
ipmihealthIs the BMC (IPMI or iLO) health OK? Uses the script sample_ipmi.
kuberneteschildnodeAre all Kubernetes child nodes up?
kubernetescomponentsstatusAre all expected agents and services up and running for active nodes?
kubernetesnodesstatusIs the status for all Kubernetes nodes OK?
kubernetespodsstatusIs the status for all pods OK?
ldapCan the ID of the user be looked up with LDAP?
lustreIs the Lustre filesystem running OK?
megaraidAre the MegaRAID controllers OK? *Either the proprietary MegaCLI software, or its successor, the proprietary StorCLI software is needed for this health check. The MegaCLI software was originally provided by LSI Logic, but LSI is now part of Broadcom. Both the MegaCLI software and the StorCLI software are now available from the Broadcom website (http://www.broadcom.com). For BCM 10 and onwards, the healthcheck first checks for StorCLI, and then for MegaCLI, and uses the first binary that is detected. For BCM versions prior to version 10, the healthcheck first checks for MegaCLI, and then StorCLI, and uses the first binary that is detected.*
mountsAre all mounts defined in the fstab OK?
mysqlIs the status and configuration of MySQL correct?
node-hardware-profileIs the specified node’s hardware configuration during health check use unchanged?
*The options to this script are described using the “-h” help option. Before this script is used for health checks, the specified hardware profile is usually first saved with the -s option. Eg: “node-hardware-profile -n node001 -s hardwarenode001”*
ntp*Is NTP synchronization happening?
oomkillerHas the oomkiller process run? Yes=FAIL. The oomkiller health check checks if the oomkiller process has run. The configuration file /cm/local/apps/cmd/scripts/healthchecks/configfiles/oomkiller.conf for the oomkiller health check can be configured to reset the response to PASS after one FAIL is logged, until the next oomkiller process runs. The processes killed by the oomkiller process are logged in /var/spool/cmd/save-oomkilleraction. A consideration of the causes and consequences of the killed processes is strongly recommended. A reset of the node is generally recommended.
opalinkhealthAre the quality and the integrity of the Intel OPA HFI link OK?
Overall_Health:<sda>Overall disk health status (SMART response) for specified device, in this case <sda>.
SMART_Health:<sda>Overall SMART health as reported by the exit code, for a specified device, in this case <sda>.
rogueprocessAre the processes that are running legitimate (ie, not ’rogue’)? Besides the FAIL/PASS/UNKNOWN response to CMDaemon, also returns a list of rogue process IDs to file descriptor 3 (InfoMessages), which the killprocess action (here) can then go ahead and kill. Illegitimate processes are processes that should not be running on the node. An illegitimate process is at least one of the following, by default:
• not part of the workload manager service or its jobs
• not a root- or system-owned process
• in the state Z, T, W, or X. States are described in the ps man pages in the section on “PROCESS STATE CODES”
Rogue process criteria can be configured in the file /cm/local/apps/cmd/scripts/healthchecks/configfiles/rogueprocess.py within the software image. To implement a changed criteria configuration, the software image used by systems on which the health check is run should be updated (section 5.6). For example, using: cmsh -c "device; imageupdate -c default -w" for the default category of nodes.
schedulersAre the queue instances of all schedulers on a node healthy ?
smartIs the SMART response healthy? The severities can be configured in the file /cm/local/apps/cmd/scripts/healthchecks/configfiles/smart.conf. By default, if a drive does not support the SMART commands and results in a “Smart command failed” info message for that drive, then the healthcheck is configured to give a PASS response. This is because the mere fact that the drive is a non-SMART drive should not be a reason to conclude that the drive is unhealthy. The info messages can be suppressed by setting an allowed list of the disks to be checked within /cm/local/apps/cmd/scripts/healthchecks/smart.
ssh2nodeIs passwordless ssh root login, from head to a node that is up, working? Some details of its behavior are:
• The health check fails on the head node if root ssh login to the head node has been disabled.
• The health check fails if ssh certificate-based access, to a non-head node that is in the UP state, fails, even if login (key-based) access is still available. The UP state is determined by whether CMDaemon is running on that node.
• If the regular node is in a DOWN state—which could be due to CMDaemon being down, or the node having been powered off gracefully, or the node suffering a sudden power failure—then the health check responds with a PASS. The idea here is to check key or certificate access, and decouple it from the node state.
swraidAre the software RAID arrays healthy?
testhealthcheckA health check script example for creating scripts, or setting a mix of PASS/FAIL/UNKNOWN responses. The source includes examples of environment variables that can be used, as well as configuration suggestions.

* built-ins, not standalone scripts.

If sampling from a head node, a standalone script is in directory:

/cm/local/apps/cmd/scripts/healthchecks/

If sampling from a regular node, a standalone script is in directory:

/cm/images/default-image/cm/local/apps/cmd/scripts/healthchecks/

G.2.2 GPU Health Checks

The data producer (section 12.2.10) for the GPU health checks of this section is GPUSampler.

The NVIDIA GPU health checks of this section, as the GPUSampler data producer name suggests, is about gathering the sampled GPU data from the devices themselves.

The device parameter for the GPU health checks in this section, unless otherwise noted, requires as a parameter the device slot number that the GPU uses. The parameter takes the form gpu0, gpu1, and so on. It is appended to the metric with a colon character. For example, the gpu_health_inforom health check, if used with gpu1, is specified as:

Example

gpu_health_inforom:gpu1

Available GPU health checks for V100 and A100 GPUs are listed in table G.2.2. The available GPU metrics are displayed in table G.1.6.

Table G.2.2: List Of GPU Health Checks
NameQuery (script response is PASS/FAIL)
gpu_health_driverIs the driver-related subsystem OK?
gpu_health_hostengine*Is the host engine status, for all GPU devices on that node, OK?
gpu_health_inforomIs the Inforom OK?
gpu_health_mcuIs the microcontroller unit OK?
gpu_health_memIs the memory subsystem OK?
gpu_health_nvlinkIs the NVLINK system OK?
gpu_health_nvswitch_fatalIs the NVSwitch showing no fatal errors?
gpu_health_nvswitch_non_fatalIs the NVSwitch showing no non-fatal errors?
gpu_health_overall**Is the overall GPU health OK?
gpu_health_pcieIs the PCIe system OK?
gpu_health_pmuIs the power management unit OK?
gpu_health_powerIs the power OK?
gpu_health_smIs the streaming multiprocessor OK?
gpu_health_thermalIs the temperature OK?

* Specified without a GPU because the check is a check for all GPUs.

** If specified without a GPU, then the check is a check for all GPUs.

For example, for the gpu_health_overall health check:

gpu_health_overall is for all the GPUs

gpu_health_overall:gpu0 is just for GPU0

G.2.3 Redfish Health Checks

The available Redfish health checks are displayed in table G.2.3.

Table G.2.3: Redfish health checks
Redfish Health CheckDescription
chassis_healthHealth status of chassis
cpu_healthHealth status of processor
memory_healthHealth status of memory
storage_healthHealth status of storage
device_healthHealth status of storage device
drive_healthHealth status of storage drive
volume_healthHealth status of storage volume
psu_healthHealth status of power supply
fan_healthHealth status of a fan
sensor_healthHealth status of a sensor
pcie_healthHealth status of PCIe device
manager_healthHealth status of manager (e.g.: HPE iLO)

G.2.4 NetQ Health Checks

NetQ health checks (table G.2.4) are healthcheck measurables sourced from NetQ. Configuring NetQ with BCM is described in section 3.11.

The data producer (section 12.2.10) for NetQ measurables is the netq data producer.

Table G.2.4: NetQ Health Checks
NetQ Health CheckQuery (Response is PASS/FAIL)
NetQ_node_fan_statusIs the fan working?
NetQ_node_NVLink_statusIs NVLink up?
NetQ_node_PSU_statusIs the power supply unit working?
NetQ_node_Temp_statusIs the temperature sensor working?

G.2.5 Parameters For Health Checks

Health checks have the parameters indicated by the left column in the example below:

Example

[myheadnode->monitoring->measurable]% show cmsh
Parameter Value
-------------------------------- ----------------------------------------------
Class Internal
Consolidator - (cmsh)
Description Checks whether cmsh is available, i.e. can we
use cmsh for the default cluster?
Disabled no (cmsh)
Gap 0 (cmsh)
Maximal age 0s (cmsh)
Maximal samples 4,096 (cmsh)
Name cmsh
Parameter
Producer cmsh
Revision
Type HealthCheck

If the value is inherited from the producer, then it is shown in parentheses next to the value. An inherited value can be overwritten by setting it directly for the parameter of a measurable.

The parameters are a subset of the parameters for metrics described in section G.1.15.

G.3 Enummetrics

Table G.3: List Of Enummetrics
NameQuery
DeviceStatusWhat is the status of the device? Possible values are:
• up
• down
• closed
• installing
• installer_failed
• installer_rebooting
• installer_callinginit
• installer_unreachable
• installer_burning
• burning
• unknown
• opening
• going_down
• pending
• no data
• undefined
wlm_slurm_stateWhat is the status of the device allocated to Slurm? Possible values are:
• allocated
• completing
• down
• drain
• draining
• fail
• failing
• idle
• maint
• mixed

G.4 Actions And Their Parameters

G.4.1 Actions

Table G.4.1: List Of Actions
NameDescription
DrainAllows no new processes on a compute node from the workload manager. This means that already running jobs are permitted to complete. Usage Tip: Plan for undrain from another node becoming active
Send e-mail to administratorsSends mail using the mailserver that was set up during server configuration. Default destination is root@localhost. The e-mail address that it is otherwise sent to is specified by the recipient parameter for this action.
EventSend an event to users with a connected client
ImageUpdateUpdate the image on the node
PowerOffPowers off, hard
PowerOnPowers on, hard
PowerResetPower reset, hard
Reboot Reboot via the system, trying to shut everything down cleanly, and then start up again
killprocess*Kills processes seen by CMDaemon with the KILL (-9) signal. The PIDs are passed via the CMD_INFO_MESSAGE environmental variable. Syntax: killprocess <PID1[,<PID2>,…]> This action is designed to work with rogueprocess (here)
remount*remounts all defined mounts
testaction*An action script example for users who would like to create their own scripts. The source has helpful remarks about the environment variables that can be used as well as tips on configuring it generally
Shutdown Power off via system, trying to shut everything down cleanly
Undrain nodeAllow processes to run on the node from the workload manager

* standalone scripts, not built-ins.

If running from a head node, the script is in directory: /cm/local/apps/cmd/scripts/actions/

If running from a regular node, the script is in directory: /cm/images/default-image/cm/local/apps/

cmd/scripts/actions/

G.4.2 Parameters For A Monitoring Action

The default monitoring actions are listed in section 12.4.4.

All actions have in common the parameters shown by the left column, illustrated by the example below for the drain action:

Example

[myheadnode->monitoring->action]% show drain
Parameter Value
------------------ -----------------------
Action Drain node from all WLM
Allowed time
Disable no
Name Drain
Revision
Run on Active
Type DrainAction

Out of the full list of default actions, the actions with only the common parameter settings are:

  • Poweron: Powers off the node

  • PowerOff: Powers off the node

  • PowerReset: Hard resets the node

  • Drain: Drains the node (does not allow new jobs on that node)

  • Undrain: Undrains the node (allows new jobs on that node)

  • Reboot: Reboots node via the operating system.

  • Shutdown: Shuts the node down via the operating system.

  • ImageUpdate: Updates the node from the software image

  • Event: Sends an event to users connected with cmsh or Base View

G.4.2.1 Extra Parameters For Some Actions

The following actions have extra parameters:

Action of the type ScriptAction:

  • killprocess: A script that kills a specified process

  • testaction: A test script

  • remount: A script to remount all devices

The extra parameters for an action of type ScriptAction are:

    • Arguments: List of arguments that are taken by the script

    • Node environment: Does the script run in the node environment?

    • Script: The script path

    • timeout: Time within which the script must run before giving up

Action of the type EmailAction:

  • Send e-mail to administrators: Sends an e-mail out, by default to the administrators

The extra parameters for an action of type EmailAction are:

    • All administrators: sends the e-mail to the list of users in the Administrator e-mail setting in partition[base] mode

    • Info: the body of the e-mail message

    • Recipients: a list of recipients