Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

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