File check_disks_xcp of Package nagios-plugins-xenserver
1
#!/bin/bash
2
# Author: Marek Rzepala <Marek.Rzepala@internetx.com>
3
# Version: 1.01
4
# Last changed: 12.11.2020
5
# Upstream URL: https://gitlab.muc.internetx.com/p-s/nagios/check_disks_xcp
6
7
### CHANGE THIS IF NEEDED
8
CRIT=90
9
WARN=80
10
TMP_FILE="/tmp/disks_host_"
11
### CHANGE THIS IF NEEDED
12
13
#exit without sr type argument
14
if [ $# -ne 1 ]; then
15
echo ""
16
echo $0
17
echo "### usage: "
18
echo " $0 [ valid sr type; showtypes for help ]"
19
exit 1
20
fi
21
22
# save sr uuids in some tmp files, which file names are based on hostnames reported from xe
23
# also dont use host attribute on lvmoiscsi; but really this should be a check whether or not sr type also has the host=<shared> property
24
if [ $1 == lvmoiscsi ]; then
25
xe host-list params=name-label | sort | awk '{print $NF}' | sed -r '/^\s*$/d' | while read line; do xe sr-list type=$1 params=uuid | sed -r '/^\s*$/d' > "$TMP_FILE""$line"; done
26
else
27
if [ $1 == showtypes ]; then
28
xe host-list params=name-label | sort | sed -r '/^\s*$/d' | while read line; do xe sr-list params=type; done | sort | uniq | sed -r '/^\s*$/d' && exit 0
29
else
30
xe host-list params=name-label | sort | awk '{print $NF}' | sed -r '/^\s*$/d' | while read line; do xe sr-list host=$line type=$1 params=uuid | sed -r '/^\s*$/d' > "$TMP_FILE"$line ; done
31
fi
32
fi
33
no_hosts=$( ls -1 "$TMP_FILE"* | wc -l )
34
35
for f in "$TMP_FILE"*
36
do
37
# create some variables for further use
38
# append different characters based on conditions
39
hostname=$(echo "$f" | sed "s#$TMP_FILE##g" | sed "s#-#_#g")
40
cat $f | awk '{print $NF}' | while read line2; do
41
physical_size=$(xe sr-list uuid=$line2 params=physical-size | awk '{print $NF}')
42
physical_usage=$(xe sr-list uuid=$line2 params=physical-utilisation | awk '{print $NF}')
43
sr_name=$(xe sr-list uuid=$line2 params=name-label | awk -F ":" '{print $NF}')
44
is_sr_shared=$([[ -z $( xe sr-list uuid=$line2 params=host | grep shared) ]] && echo 0 || echo 1)
45
if [[ $physical_size -eq 0 ]]; then
46
disk_usage=$(echo 0)
47
else
48
disk_usage=$( echo "scale=3; $( echo $physical_usage) / $( echo $physical_size) * 100" | bc | awk '{print ($0-int($0)<0.499)?int($0):int($0)+1}')
49
fi
50
if [[ $disk_usage -ge CRIT ]]; then
51
if [[ $is_sr_shared -eq 1 ]]; then
52
# echo "1CR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
53
echo "1CR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
54
else
55
# echo "1CR on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
56
echo "1CR on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
57
fi
58
else
59
if [[ $disk_usage -ge WARN ]]; then
60
if [[ $is_sr_shared -eq 1 ]]; then
61
# echo "1WR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
62
echo "1WR SHARED on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
63
else
64
# echo "1WR on $line2 - $disk_usage"%" storage usage on"$sr_name" ":" $hostname" >> $f
65
echo "1WR on $line2 - $disk_usage"%" storage usage on"$sr_name"" >> $f
66
fi
67
fi
68
fi
69
done
70
71
done
72
73
if [ $1 == lvmoiscsi ]; then
74
cr_shared=$(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1CR)
75
wr_shared=$(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1WR)
76
if [[ $(echo $cr_shared | awk '{print NF}') -ne 0 ]]; then
77
echo -n "CRITICAL - "
78
echo -n $(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1CR | awk -F "-" '{print $6 " " "##"}')
79
[[ $(echo $wr_shared | awk '{print NF}') -eq 0 ]] && echo
80
if [[ $(echo $wr_shared | awk '{print NF}') -ne 0 ]]; then
81
echo -n "WARNING" $(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1WR | awk -F "-" '{print $6 " " "##"}')
82
echo
83
exit 2
84
fi
85
else
86
if [[ $(echo $wr_shared | awk '{print NF}') -ne 0 ]]; then
87
echo -n "WARNING - "
88
echo -n $(grep "SHARED" "$TMP_FILE"* | awk -F ":" '{print $2}' | sort | uniq | grep 1WR | awk -F "-" '{print $6 " " "##"}')
89
echo
90
exit 1
91
else
92
if [[ $(echo $cr_shared | awk '{print NF}') -eq 0 ]] && [[ $(echo $wr_shared | awk '{print NF}') -eq 0 ]]; then
93
echo "OK"
94
exit 0
95
fi
96
fi
97
fi
98
fi
99
100
cr_local=$(grep "1CR" "$TMP_FILE"* | awk -F ":" '{print $2}')
101
wr_local=$(grep "1WR" "$TMP_FILE"* | awk -F ":" '{print $2}')
102
103
if [[ $(echo $cr_local | awk '{print NF}') -ne 0 ]]; then
104
echo -n "CRITICAL - "
105
echo -n $(grep "1CR" "$TMP_FILE"* | awk '{print $5, $6, $7, $8, $9, $10, $8, $1}' | awk -F ":" '{print $1 " ##"}' | sed "s#$TMP_FILE##g")
106
[[ $(echo $wr_local | awk '{print NF}') -eq 0 ]] && echo
107
if [[ $(echo $wr_local | awk '{print NF}') -ne 0 ]]; then
108
echo -n "WARNING" $(grep "1WR" "$TMP_FILE"* | awk '{print $5, $6, $7, $8, $9, $10, $8, $1}' | awk -F ":" '{print $1 " ##"}' | sed "s#$TMP_FILE##g")
109
echo
110
exit 2
111
fi
112
else
113
if [[ $(echo $wr_local | awk '{print NF}') -ne 0 ]]; then
114
echo -n "WARNING - "
115
echo -n $(grep "1WR" "$TMP_FILE"* | awk '{print $5, $6, $7, $8, $9, $10, $8, $1}' | awk -F ":" '{print $1 " ##"}' | sed "s#$TMP_FILE##g")
116
117
echo
118
exit 1
119
else
120
if [[ $(echo $cr_local | awk '{print NF}') -eq 0 ]] && [[ $(echo $wr_local | awk '{print NF}') -eq 0 ]]; then
121
echo "OK"
122
exit 0
123
fi
124
fi
125
fi
126