root / plugins / virtualization / vmware / esxi @ e5ce7492
Historique | Voir | Annoter | Télécharger (5,37 ko)
| 1 |
#!/bin/bash |
|---|---|
| 2 |
|
| 3 |
GREP="/bin/grep" |
| 4 |
SED="/bin/sed" |
| 5 |
TAIL="/usr/bin/tail" |
| 6 |
SSH="/usr/bin/ssh" |
| 7 |
BASENAME="/usr/bin/basename" |
| 8 |
|
| 9 |
# script name must be like esx_cpu_machine.domain or esx_mem_machine.domain |
| 10 |
temp="$(basename $0 | $SED 's/^esx_//g')" |
| 11 |
which_info="${temp%%_*}"
|
| 12 |
HOST="${temp##*_}"
|
| 13 |
|
| 14 |
case "$which_info" in |
| 15 |
"cpu" | "mem" | "hmem" | "gmem" ) ;; |
| 16 |
* ) echo "Script name incorrect, should be esx_xxx_hostname where xxx in {cpu,mem,hmem,gmem}"
|
| 17 |
exit 1;; |
| 18 |
esac |
| 19 |
|
| 20 |
# --------------- |
| 21 |
|
| 22 |
function get_infos () {
|
| 23 |
summary="$($SSH "$HOST" \ |
| 24 |
vim-cmd hostsvc/hostsummary \; \ |
| 25 |
vim-cmd vmsvc/getallvms)" |
| 26 |
} |
| 27 |
|
| 28 |
function get_vmlist () {
|
| 29 |
total_linenumber="$(echo "$summary" | wc -l)" |
| 30 |
|
| 31 |
vmlist_linenumber="$(echo "$summary" | $GREP -n "^Vmid")" |
| 32 |
vmlist_linenumber="${vmlist_linenumber/:*/}"
|
| 33 |
|
| 34 |
vmlist="$(echo "$summary" | $TAIL -n $(($total_linenumber - $vmlist_linenumber)) | tr -s " ")" |
| 35 |
} |
| 36 |
|
| 37 |
function overallCpuUsage () {
|
| 38 |
cpu="$(echo "$1" | $GREP "overallCpuUsage")" |
| 39 |
cpu="${cpu/*overallCpuUsage = /}"
|
| 40 |
cpu="${cpu/,*/}"
|
| 41 |
} |
| 42 |
|
| 43 |
function overallMemoryUsage () {
|
| 44 |
mem="$(echo "$1" | $GREP "overallMemoryUsage")" |
| 45 |
mem="${mem/*overallMemoryUsage = /}"
|
| 46 |
mem="${mem/,*/}"
|
| 47 |
} |
| 48 |
|
| 49 |
# --------------- |
| 50 |
|
| 51 |
function get_vmsvcsummaries () {
|
| 52 |
n=0 |
| 53 |
cmd="" |
| 54 |
# echo "$vmlist" | \ |
| 55 |
while read vmline ; do |
| 56 |
id[$n]="${vmline%% *}"
|
| 57 |
temp="${vmline#${id[$n]} }"
|
| 58 |
name[$n]="${temp%% *}"
|
| 59 |
cmd="$cmd""vim-cmd vmsvc/get.summary ${id[$n]} \\\; "
|
| 60 |
(( n++ )) |
| 61 |
done <<EOF |
| 62 |
$vmlist |
| 63 |
EOF |
| 64 |
|
| 65 |
vmsummaries="$($SSH "$HOST" $cmd)" |
| 66 |
} |
| 67 |
|
| 68 |
# --------------- |
| 69 |
|
| 70 |
function VMoverallCpuUsage () {
|
| 71 |
cpulist="$(echo "$1" | $GREP "overallCpuUsage")" |
| 72 |
n=0 |
| 73 |
while read c ; do |
| 74 |
temp="${c/*overallCpuUsage = /}"
|
| 75 |
vmcpu[$n]="${temp/,*/}"
|
| 76 |
if [ "${vmcpu[$n]}" == "<unset>" ]; then
|
| 77 |
vmcpu[$n]="0" |
| 78 |
fi |
| 79 |
(( n++ )) |
| 80 |
done <<EOF |
| 81 |
$cpulist |
| 82 |
EOF |
| 83 |
} |
| 84 |
|
| 85 |
function VMoverallGuestMemUsage () {
|
| 86 |
memlist="$(echo "$1" | $GREP "guestMemoryUsage")" |
| 87 |
n=0 |
| 88 |
while read m ; do |
| 89 |
temp="${m/*guestMemoryUsage = /}"
|
| 90 |
vmmem[$n]="${temp/,*/}"
|
| 91 |
if [ "${vmmem[$n]}" == "<unset>" ]; then
|
| 92 |
vmmem[$n]="0" |
| 93 |
fi |
| 94 |
(( n++ )) |
| 95 |
done <<EOF |
| 96 |
$memlist |
| 97 |
EOF |
| 98 |
} |
| 99 |
|
| 100 |
function VMoverallHostMemUsage () {
|
| 101 |
memlist="$(echo "$1" | $GREP "hostMemoryUsage")" |
| 102 |
n=0 |
| 103 |
while read m ; do |
| 104 |
temp="${m/*hostMemoryUsage = /}"
|
| 105 |
vmmem[$n]="${temp/,*/}"
|
| 106 |
if [ "${vmmem[$n]}" == "<unset>" ]; then
|
| 107 |
vmmem[$n]="0" |
| 108 |
fi |
| 109 |
(( n++ )) |
| 110 |
done <<EOF |
| 111 |
$memlist |
| 112 |
EOF |
| 113 |
} |
| 114 |
|
| 115 |
|
| 116 |
# --------------- |
| 117 |
|
| 118 |
if [ "$1" = "autoconf" ]; then |
| 119 |
get_infos |
| 120 |
if [ -n "$summary" ]; then |
| 121 |
echo yes |
| 122 |
exit 0 |
| 123 |
else |
| 124 |
echo "Cannot connect to ESX server $HOST" |
| 125 |
exit 1 |
| 126 |
fi |
| 127 |
fi |
| 128 |
|
| 129 |
if [ "$1" = "config" ]; then |
| 130 |
get_infos |
| 131 |
if [ -z "$summary" ]; then |
| 132 |
echo "Cannot connect to ESX server $HOST" |
| 133 |
exit 1 |
| 134 |
fi |
| 135 |
|
| 136 |
case "$which_info" in |
| 137 |
"cpu" ) |
| 138 |
echo 'graph_title ESXi Domain CPU Usage' |
| 139 |
echo 'graph_args -l 0' |
| 140 |
echo 'graph_scale no' |
| 141 |
echo 'graph_vlabel CPU usage in MHz' |
| 142 |
echo 'graph_category esx' |
| 143 |
echo 'graph_info This graph shows the average CPU MHz used by each domain' |
| 144 |
|
| 145 |
name="Domain_0" |
| 146 |
echo "$name.label $name" |
| 147 |
echo "$name.type GAUGE" |
| 148 |
echo "$name.draw AREA" |
| 149 |
echo "$name.min 0" |
| 150 |
echo "$name.info CPU MHz used by $name" |
| 151 |
|
| 152 |
|
| 153 |
get_vmlist |
| 154 |
if [ -n "$vmlist" ]; then |
| 155 |
n=0 |
| 156 |
cmd="" |
| 157 |
while read vmline ; do |
| 158 |
id="${vmline%% *}"
|
| 159 |
temp="${vmline#$id }"
|
| 160 |
name="${temp%% *}"
|
| 161 |
|
| 162 |
name=`echo $name | sed -e"s/[-\.]/_/g"` |
| 163 |
echo "$name.label $name" |
| 164 |
echo "$name.type GAUGE" |
| 165 |
echo "$name.draw STACK" |
| 166 |
echo "$name.min 0" |
| 167 |
echo "$name.info CPU MHz used by $name" |
| 168 |
|
| 169 |
(( n++ )) |
| 170 |
done <<EOF |
| 171 |
$vmlist |
| 172 |
EOF |
| 173 |
fi;; |
| 174 |
"mem" | "hmem" | "gmem" ) |
| 175 |
echo 'graph_title ESXi Domain '"$which_info"' Usage' |
| 176 |
echo 'graph_args -l 0' |
| 177 |
echo 'graph_scale no' |
| 178 |
echo 'graph_vlabel Memory usage in Megabytes' |
| 179 |
echo 'graph_category esx' |
| 180 |
echo 'graph_info This graph shows the average Memory used by each domain' |
| 181 |
|
| 182 |
name="Domain_0" |
| 183 |
echo "$name.label $name" |
| 184 |
echo "$name.type GAUGE" |
| 185 |
echo "$name.draw AREA" |
| 186 |
echo "$name.min 0" |
| 187 |
echo "$name.info Memory usage for $name" |
| 188 |
|
| 189 |
|
| 190 |
get_vmlist |
| 191 |
if [ -n "$vmlist" ]; then |
| 192 |
n=0 |
| 193 |
cmd="" |
| 194 |
while read vmline ; do |
| 195 |
id="${vmline%% *}"
|
| 196 |
temp="${vmline#$id }"
|
| 197 |
name="${temp%% *}"
|
| 198 |
|
| 199 |
name=`echo $name | sed -e"s/[-\.]/_/g"` |
| 200 |
echo "$name.label $name" |
| 201 |
echo "$name.type GAUGE" |
| 202 |
echo "$name.draw STACK" |
| 203 |
echo "$name.min 0" |
| 204 |
echo "$name.info Memory usage for $name" |
| 205 |
|
| 206 |
(( n++ )) |
| 207 |
done <<EOF |
| 208 |
$vmlist |
| 209 |
EOF |
| 210 |
fi;; |
| 211 |
|
| 212 |
esac |
| 213 |
|
| 214 |
exit 0 |
| 215 |
fi |
| 216 |
|
| 217 |
# --------------- |
| 218 |
# Get the informations |
| 219 |
|
| 220 |
get_infos |
| 221 |
if [ -z "$summary" ]; then |
| 222 |
echo "Cannot connect to ESX server $HOST" |
| 223 |
exit 1 |
| 224 |
fi |
| 225 |
|
| 226 |
case $which_info in |
| 227 |
"cpu" ) overallCpuUsage "$summary" ;; |
| 228 |
"mem" | "hmem" | "gmem" ) overallMemoryUsage "$summary" ;; |
| 229 |
esac |
| 230 |
|
| 231 |
|
| 232 |
get_vmlist |
| 233 |
if [ -n "$vmlist" ]; then |
| 234 |
|
| 235 |
get_vmsvcsummaries |
| 236 |
|
| 237 |
case $which_info in |
| 238 |
"cpu" ) VMoverallCpuUsage "$vmsummaries";; |
| 239 |
"mem" | "hmem" ) VMoverallHostMemUsage "$vmsummaries";; |
| 240 |
"gmem" ) VMoverallGuestMemUsage "$vmsummaries";; |
| 241 |
esac |
| 242 |
fi |
| 243 |
|
| 244 |
|
| 245 |
# --------------- |
| 246 |
# Print information Munin style |
| 247 |
case $which_info in |
| 248 |
"cpu" ) echo "Domain_0.value ""$cpu";; |
| 249 |
"mem" | "gmem" | "hmem" ) echo "Domain_0.value ""$(($mem))";; |
| 250 |
esac |
| 251 |
|
| 252 |
|
| 253 |
if [ -n "$vmlist" ]; then |
| 254 |
n=0 |
| 255 |
while [ -n "${id[$n]}" ]; do
|
| 256 |
#echo ${id[$n]} ${name[$n]} ${vmcpu[$n]} ${vmmem[$n]}
|
| 257 |
nicename=`echo ${name[$n]} | sed 's/[^a-z|A-Z|0-9]/\_/g'`
|
| 258 |
case $which_info in |
| 259 |
"cpu" ) echo "$nicename".value "${vmcpu[$n]}";;
|
| 260 |
"mem" | "gmem" | "hmem" ) echo "$nicename".value "$((${vmmem[$n]}))";;
|
| 261 |
esac |
| 262 |
(( n++ )) |
| 263 |
done |
| 264 |
fi |
