root / plugins / virtualization / vmware / esxi @ e5ce7492
Historique | Voir | Annoter | Télécharger (5,37 ko)
| 1 | 16b041fd | Jef Bucas | #!/bin/bash |
|---|---|---|---|
| 2 | |||
| 3 | 724072e7 | Joachim Tingvold | GREP="/bin/grep" |
| 4 | SED="/bin/sed" |
||
| 5 | 16b041fd | Jef Bucas | 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 | 49a49e8c | Jef Bucas | if [ "${vmcpu[$n]}" == "<unset>" ]; then
|
| 77 | vmcpu[$n]="0" |
||
| 78 | fi |
||
| 79 | 16b041fd | Jef Bucas | (( 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 | 49a49e8c | Jef Bucas | if [ "${vmmem[$n]}" == "<unset>" ]; then
|
| 92 | vmmem[$n]="0" |
||
| 93 | fi |
||
| 94 | 16b041fd | Jef Bucas | (( 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 | 49a49e8c | Jef Bucas | if [ "${vmmem[$n]}" == "<unset>" ]; then
|
| 107 | vmmem[$n]="0" |
||
| 108 | fi |
||
| 109 | 16b041fd | Jef Bucas | (( 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 | 724072e7 | Joachim Tingvold | nicename=`echo ${name[$n]} | sed 's/[^a-z|A-Z|0-9]/\_/g'`
|
| 258 | 16b041fd | Jef Bucas | case $which_info in |
| 259 | 724072e7 | Joachim Tingvold | "cpu" ) echo "$nicename".value "${vmcpu[$n]}";;
|
| 260 | "mem" | "gmem" | "hmem" ) echo "$nicename".value "$((${vmmem[$n]}))";;
|
||
| 261 | 16b041fd | Jef Bucas | esac |
| 262 | (( n++ )) |
||
| 263 | done |
||
| 264 | fi |
