blob: 30e11e58d4c1fe69713adb2caef0ef2030d5dc47 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#!/bin/bash
set -Eeu -o pipefail
shopt -s lastpipe
trap 'exit 3' ERR
usage() {
echo 'usage: check_zpool -w WARN_THRESHOLD -c CRIT_THRESHOLD' 1>&2
exit 3
}
while getopts ':w:c:' opt; do
case $opt in
w) WARN_THRESHOLD=${OPTARG//%/} ;;
c) CRIT_THRESHOLD=${OPTARG//%/} ;;
*) usage ;;
esac
done
shift $((OPTIND-1))
if [ -z "${WARN_THRESHOLD:-}" -o -z "${CRIT_THRESHOLD:-}" ]; then
usage
fi
if (( WARN_THRESHOLD < CRIT_THRESHOLD )); then
echo 'WARN must be greater than CRIT' 1>&2
exit 3
fi
CRIT=()
WARN=()
OK=()
zpool list -Ho name,free,capacity,health | while read -r name free capacity health; do
capacity=${capacity//%/}
percent_free=$(( 100 - capacity ))
output="${name} $health: $free free (${percent_free}%)"
if [ "$health" != ONLINE ]; then
output="$output"$'\n'"$(zpool status "$name")"
fi
if (( percent_free < CRIT_THRESHOLD )) || [ "$health" != ONLINE ]; then
CRIT+=("$output")
elif (( percent_free < WARN_THRESHOLD )); then
WARN+=("$output")
else
OK+=("$output")
fi
done
if [ -z "${CRIT[*]}${WARN[*]}${OK[*]}" ]; then
echo 'OK - no zpools present'
exit 0
fi
rc=0
for line in "${CRIT[@]}"; do
echo "CRIT - ${line}"
rc=3
done
for line in "${WARN[@]}"; do
echo "WARN - ${line}"
(( rc )) || rc=2
done
for line in "${OK[@]}"; do
echo "OK - ${line}"
done
exit $rc
|