File: //lib64/nagios/plugins/check_zpool_usage.sh
#!/usr/bin/env bash
# Icinga/Nagios plugin to check zpool free space
# Change the VALUE number to determine <#TB will the check be.
VALUE=5
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--usage)
if [[ -n $2 && $2 =~ ^[0-9]+$ ]]; then
VALUE=$2
shift 2
else
echo "Error: --usage requires an integer argument" >&2
exit 3
fi
;;
*)
shift
;;
esac
done
THRESHOLD=$((VALUE * 1024 * 1024 * 1024 * 1024))
critical_pools=()
while IFS=$'\t' read -r pool free; do
[[ -z "$pool" ]] && continue
if (( free < THRESHOLD )); then
critical_pools+=("$pool")
fi
done < <(zpool list -Hp -o name,free 2>/dev/null)
if [ ${#critical_pools[@]} -gt 0 ]; then
echo "CRITICAL: ${critical_pools[*]} pool requires attention ${VALUE}TB"
exit 2
else
echo "OK: All zpools have >=${VALUE}TB free"
exit 0
fi