diff --git a/roles/float-base/files/node-exporter-scripts/md.sh b/roles/float-base/files/node-exporter-scripts/md.sh index 2c17eee01c1808096ae6468b0558220b23e06ed5..41e4049990781ef860e016dee6ba300b1cdbff34 100644 --- a/roles/float-base/files/node-exporter-scripts/md.sh +++ b/roles/float-base/files/node-exporter-scripts/md.sh @@ -3,18 +3,13 @@ #!/usr/bin/env bash set -eu -for MD_DEVICE in /dev/md/*; do +RAID_ARRAYS=$(lsblk --noheadings --output NAME,TYPE --list | awk '$2 ~ /^raid/ { print $1 }') + +for MD_DEVICE in ${RAID_ARRAYS}; do # Subshell to avoid eval'd variables from leaking between iterations ( - # Resolve symlink to discover device, e.g. /dev/md127 - MD_DEVICE_NUM=$(readlink -f "${MD_DEVICE}") - - # Remove /dev/ prefix - MD_DEVICE_NUM=${MD_DEVICE_NUM#/dev/} - MD_DEVICE=${MD_DEVICE#/dev/md/} - # Query sysfs for info about md device - SYSFS_BASE="/sys/devices/virtual/block/${MD_DEVICE_NUM}/md" + SYSFS_BASE="/sys/devices/virtual/block/${MD_DEVICE}/md" MD_LAYOUT=$(cat "${SYSFS_BASE}/layout") MD_LEVEL=$(cat "${SYSFS_BASE}/level") MD_METADATA_VERSION=$(cat "${SYSFS_BASE}/metadata_version") @@ -25,18 +20,18 @@ for MD_DEVICE in /dev/md/*; do # Output RAID array informational metric. # NOTE: Metadata version is a label rather than a separate metric because the version can be a string - echo "node_md_info{md_device=\"${MD_DEVICE_NUM}\", md_name=\"${MD_DEVICE}\", raid_level=\"${MD_LEVEL}\", md_metadata_version=\"${MD_METADATA_VERSION}\"} 1" + echo "node_md_info{md_device=\"${MD_DEVICE}\", raid_level=\"${MD_LEVEL}\", md_metadata_version=\"${MD_METADATA_VERSION}\"} 1" # Fetch sync state and metrics. SYNC_STATE=$(cat "${SYSFS_BASE}/sync_action") - echo "node_md_sync_state{md_device=\"${MD_DEVICE_NUM}\",sync_state=\"${SYNC_STATE}\"} 1" + echo "node_md_sync_state{md_device=\"${MD_DEVICE}\",sync_state=\"${SYNC_STATE}\"} 1" SYNC_SPEED=$(cat "${SYSFS_BASE}/sync_speed") if [ "$SYNC_SPEED" = "none" ]; then SYNC_SPEED=0 fi - echo "node_md_sync_speed{md_device=\"${MD_DEVICE_NUM}\"} ${SYNC_SPEED}" + echo "node_md_sync_speed{md_device=\"${MD_DEVICE}\"} ${SYNC_SPEED}" DEGRADED=$(cat "${SYSFS_BASE}/degraded") - echo "node_md_degraded{md_device=\"${MD_DEVICE_NUM}\"} ${DEGRADED}" + echo "node_md_degraded{md_device=\"${MD_DEVICE}\"} ${DEGRADED}" ) done