-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathcheck_all_disks_lifetime.sh
executable file
·74 lines (62 loc) · 1.94 KB
/
check_all_disks_lifetime.sh
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
THRESHOLD=7
[ -n "$1" ] && THRESHOLD="$1"
E_OK=0
E_UNKNOWN=3
WARNINGS=()
IGNORED=()
LAST_WARNING=""
PERFDATA=""
REMAINS=()
RET=$E_OK
set -o pipefail
(
# shellcheck disable=SC2010
for DEVICE in $(ls /sys/block | grep -Ev '^(sr|vd|fd)'); do
if [ -L "/sys/block/$DEVICE/device" ]; then
if [[ "$DEVICE" =~ sd ]]; then
true
elif [[ "$DEVICE" =~ nvme ]]; then
# /dev/nvme1n1 -> /dev/nvme1
DEVICE=$(echo "$DEVICE" | grep -o '^[a-z/]*[0-9]')
else
echo "UNKOWN - $DEVICE is not sd nor nvme"
exit $E_UNKNOWN
fi
DEVPATH=$(echo "/dev/$DEVICE" | sed 's#!#/#g')
out=$(/usr/local/nagios/plugins/check_disk_lifetime.sh "$DEVPATH" "$THRESHOLD")
ret=$?
if [ $ret -eq 3 ]; then
echo "$out"
exit 3
fi
if echo "$out" | grep -q ' | ' ; then
perfdata=$(echo "$out" | cut -d '|' -f 2 | sed "s#=#_$DEVPATH=#g")
PERFDATA="$PERFDATA $perfdata"
REMAINS+=("$DEVICE=$(echo "$perfdata" | grep -Eo '[0-9]+%')")
if [ $ret -eq 1 ]; then
RET=$ret
WARNINGS+=("$DEVPATH")
LAST_WARNING="$(echo "$out" | cut -d '|' -f 1)"
echo "$LAST_WARNING"
fi
else
echo "$out"
IGNORED+=("$DEVPATH")
fi
fi
done
if [ ${#IGNORED[@]} -gt 0 ]; then
IGNORED_STR=" (ignored: ${IGNORED[*]})"
fi
if [ ${#REMAINS[@]} -eq 0 ]; then
echo "OK - No disk to check$IGNORED_STR"
elif [ $RET -eq 0 ]; then
echo "OK - Disks lifetime are OK (${REMAINS[*]})$IGNORED_STR | $PERFDATA"
elif [ ${#WARNINGS[@]} -eq 1 ]; then
echo "$LAST_WARNING | $PERFDATA"
else
echo "WARNING : ${WARNINGS[*]} have lost more than 1% lifetime in less than $THRESHOLD days (${REMAINS[*]})$IGNORED_STR | $PERFDATA"
fi
exit $RET
) | tac # Shinken uses the first line as the main output, so we need to inverse the output