From 89a2f21f45fbfac3dd329afb4b515b4d923fa778 Mon Sep 17 00:00:00 2001 From: Matt Bostock Date: Thu, 31 Aug 2017 17:00:42 +0100 Subject: [PATCH] Always try to return smartmon_device_info metric (#663) * Always try to return smartmon_device_info metric Sometimes the 'model family' field is not returned by `smartctl' because a disk is not in the disk database for the version of smartmontools installed on the system. In those cases, the device model and serial number is still returned (at least as far as I have observed. Re-work the logic to prefer the 'vendor' field first, and if not present, always output a `smartmon_device_info` metric even if some labels have empty values. On the box I'm testing this on, where previously no metric was returned, it now returns: # HELP smartmon_device_info SMART metric device_info # TYPE smartmon_device_info gauge smartmon_device_info{disk="/dev/sda",type="sat",model_family="",device_model="INTEL REDACTED",serial_number="REDACTED",firmware_version="REDACTED"} 1 smartmon_device_info{disk="/dev/sdb",type="sat",model_family="",device_model="INTEL REDACTED",serial_number="REDACTED",firmware_version="REDACTED"} 1 smartmon_device_info{disk="/dev/sdc",type="sat",model_family="",device_model="INTEL REDACTED",serial_number="REDACTED",firmware_version="REDACTED"} 1 smartmon_device_info{disk="/dev/sdd",type="sat",model_family="",device_model="INTEL REDACTED",serial_number="REDACTED",firmware_version="REDACTED"} 1 smartmon_device_info{disk="/dev/sde",type="sat",model_family="",device_model="INTEL REDACTED",serial_number="REDACTED",firmware_version="REDACTED"} 1 smartmon_device_info{disk="/dev/sdf",type="sat",model_family="",device_model="INTEL REDACTED",serial_number="REDACTED",firmware_version="REDACTED"} 1 * Add trailing newline Because POSIX: https://stackoverflow.com/a/729795 --- text_collector_examples/smartmon.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/text_collector_examples/smartmon.sh b/text_collector_examples/smartmon.sh index cd121b8e..5c8077f5 100755 --- a/text_collector_examples/smartmon.sh +++ b/text_collector_examples/smartmon.sh @@ -102,10 +102,10 @@ parse_smartctl_info() { esac fi done - if [[ -n "${model_family}" ]] ; then - echo "device_info{disk=\"${disk}\",type=\"${disk_type}\",model_family=\"${model_family}\",device_model=\"${device_model}\",serial_number=\"${serial_number}\",firmware_version=\"${fw_version}\"} 1" - elif [[ -n "${vendor}" ]] ; then + if [[ -n "${vendor}" ]] ; then echo "device_info{disk=\"${disk}\",type=\"${disk_type}\",vendor=\"${vendor}\",product=\"${product}\",revision=\"${revision}\",lun_id=\"${lun_id}\"} 1" + else + echo "device_info{disk=\"${disk}\",type=\"${disk_type}\",model_family=\"${model_family}\",device_model=\"${device_model}\",serial_number=\"${serial_number}\",firmware_version=\"${fw_version}\"} 1" fi echo "device_smart_available{disk=\"${disk}\",type=\"${disk_type}\"} ${smart_available}" echo "device_smart_enabled{disk=\"${disk}\",type=\"${disk_type}\"} ${smart_enabled}" @@ -146,4 +146,4 @@ for device in ${device_list}; do /usr/sbin/smartctl -i -H -d "${type}" "${disk}" | parse_smartctl_info "${disk}" "${type}" # Get the SMART attributes /usr/sbin/smartctl -A -d "${type}" "${disk}" | parse_smartctl_attributes "${disk}" "${type}" -done | format_output \ No newline at end of file +done | format_output