Projet

Général

Profil

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

root / plugins / emc / emc_vnx_block_lun_perfdata @ d31e38b5

Historique | Voir | Annoter | Télécharger (16,6 ko)

1
#!/bin/bash
2

    
3
: <<=cut
4

    
5
=head1 NAME 
6

    
7
 emc_vnx_block_lun_perfdata - Plugin to monitor Block statistics of EMC VNX 5300
8
 Unified Storage Processors
9

    
10
=head1 AUTHOR
11

    
12
 Evgeny Beysembaev <megabotva@gmail.com>
13

    
14
=head1 LICENSE
15

    
16
 GPLv2
17

    
18
=head1 MAGIC MARKERS
19

    
20
  #%# family=auto
21
  #%# capabilities=autoconf
22

    
23
=head1 DESCRIPTION
24

    
25
 The plugin monitors LUN of EMC Unified Storage FLARE SP's. Probably it can also
26
 be compatible with  other Clariion systems. It uses SSH to connect to Control 
27
 Stations, then remotely executes /nas/sbin/navicli and fetches and parses data 
28
 from it. Obviously, it's easy to reconfigure plugin not to use Control Stations'
29
 navicli in favor of using locally installed /opt/Navisphere's cli. There is no 
30
 difference which Storage Processor to use to gather data, so this plugin tries 
31
 both of them and uses the first active one. This plugin also automatically 
32
 chooses Primary Control Station from the list by calling /nasmcd/sbin/getreason 
33
 and /nasmcd/sbin/t2slot.
34
 
35
 I left some parts of this plugin as rudimental to make easy to reconfigure it 
36
 to draw more (or less) data.
37

    
38
 The plugin has been tested in the following Operating Environment (OE):
39
  File Version T7.1.76.4
40
  Block Revision 05.32.000.5.215
41

    
42
=head1 COMPATIBILITY
43

    
44
 The plugin has been written for being compatible with EMC VNX5300 Storage 
45
 system, as this is the only EMC storage which i have. By the way, i am pretty 
46
 sure it can also work with other VNX1 storages, like VNX5100 and VNX5500, and 
47
 old-style Clariion systems.
48
 About VNX2 series, i don't know whether the plugin will be able to work with 
49
 them. Maybe it would need some corrections in command-line backend. The same 
50
 situation is with other EMC systems, so i encourage you to try and fix the 
51
 plugin. 
52
 
53
=head1 LIST OF GRAPHS
54

    
55
 Graph category Disk:
56
	EMC VNX 5300 LUN Blocks
57
	EMC VNX 5300 LUN Requests
58
	EMC VNX 5300 Counted Load per LUN
59
	EMC VNX 5300 Sum of Outstanding Requests
60
	EMC VNX 5300 Non-Zero Request Count Arrivals
61
	EMC VNX 5300 Trespasses
62
	EMC VNX 5300 Counted Block Queue Length
63
	EMC VNX 5300 Counted Load per SP
64

    
65

    
66
=head1 CONFIGURATION
67

    
68
=head2 Prerequisites
69

    
70
 First of all, be sure that statistics collection is turned on. You can do this
71
 by typing:
72
 navicli -h spa setstats -on
73
 on your Control Station or locally through /opt/Navisphere 
74

    
75
 Also, the plugin actively uses buggy "cdef" feature of Munin 2.0, and here we 
76
 can be hit by the following bugs:
77
 http://munin-monitoring.org/ticket/1017 - Here I have some workarounds in the 
78
 plugin, be sure that they are working.
79
 http://munin-monitoring.org/ticket/1352 - Metrics in my plugin can be much 
80
 longer than 15 characters.
81
 Without these workarounds "Load" and "Queue Length" would not work.
82

    
83
=head2 Installation
84

    
85
 The plugin uses SSH to connect to Control Stations. It's possible to use 
86
 'nasadmin' user, but it would be better if you create read-only global user by
87
 Unisphere Client. The user should have only Operator role. 
88
 I created "operator" user but due to the fact that Control Stations already 
89
 had one internal "operator" user, the new one was called "operator1". So be 
90
 careful. After that, copy .bash_profile from /home/nasadmin to a newly created
91
 /home/operator1.
92
 
93
 On munin-node side choose a user which will be used to connect through SSH. 
94
 Generally user "munin" is ok. Then, execute "sudo su munin -s /bin/bash", 
95
 "ssh-keygen" and "ssh-copy-id" to both Control Stations with newly created 
96
 user.
97
 
98
 Make a link from /usr/share/munin/plugins/emc_vnx_dm_basic_stats to 
99
 /etc/munin/plugins/emc_vnx_dm_basic_stats_<NAME>, where <NAME> is any 
100
 arbitrary name of your storage system. The plugin will return <NAME> in its 
101
 answer as "host_name" field.
102
 
103
 For example, assume your storage system is called "VNX5300".
104
 Make a configuration file at 
105
 /etc/munin/plugin-conf.d/emc_vnx_block_lun_perfdata_VNX5300. For example:
106
 
107
 [emc_vnx_block_lun_perfdata_VNX5300]
108
 user munin					
109
 env.username operator1
110
 env.cs_addr 192.168.1.1 192.168.1.2	
111

    
112
 or:
113

    
114
 [emc_vnx_block_lun_perfdata_VNX5300]
115
 user munin                                     
116
 env.username operator1
117
 env.localcli /opt/Navisphere/bin/naviseccli
118
 env.sp_addr 192.168.0.3 192.168.0.4
119
 env.blockpw foobar
120

    
121
 Where: 
122
 user - SSH Client local user
123
 env.username - Remote user with Operator role for Block or File part
124
 env.cs_addr - Control Stations addresses for remote (indirect) access.
125
 env.localcli - Optional. Path of localhost 'Naviseccli' binary. If this 
126
   variable is set, env.cs_addr is ignored, and local 'navicli' is used.
127
   Requires env.blockpw variable.
128
 env.sp_addr - Default is "SPA SPB". In case of "direct" connection to 
129
   Storage Processors, their addresses/hostnames are written here.
130
 env.blockpw - Password for connecting to Storage Processors
131

    
132
=head1 ERRATA
133

    
134
 It counts Queue Length in not fully correct way. We take parameters totally 
135
 from both SP's, but after we divide them independently by load of SPA and SPB.
136
 Anyway, in most AAA / ALUA cases the formula is correct.
137

    
138
=head1 HISTORY
139

    
140
 09.11.2016 - First Release
141
 26.12.2016 - Compatibility with Munin coding style
142

    
143
=cut
144

    
145
export LANG=C
146

    
147
. "$MUNIN_LIBDIR/plugins/plugin.sh"
148

    
149
cs_addr="${cs_addr:=""}"
150
username="${username:=""}"
151
blockpw="${blockpw:=""}"
152

    
153
TARGET=$(echo "${0##*/}" | cut -d _ -f 6)
154

    
155
# "All Storage Processors we have"
156
if [[ -v "sp_addr" ]]; then
157
	SPALL=$sp_addr
158
else
159
	SPALL="SPA SPB"
160
fi
161
# "navicli" command. Can be local or remote, through Control Stations
162
if [[ -v "localcli" ]]; then
163
	NAVICLI=$localcli
164
else
165
	NAVICLI="/nas/sbin/navicli"
166
fi
167

    
168
# Prints "10" on stdout if found Primary Online control station. "11" - for Secondary Online control station. 
169
ssh_check_cmd() {
170
		ssh -q "$username@$1" "/nasmcd/sbin/getreason | grep -w \"slot_\$(/nasmcd/sbin/t2slot)\" | cut -d- -f1 | awk '{print \$1}' "
171
}
172

    
173

    
174
check_conf_and_set_vars () {
175
	if [ -z "$username" ]; then
176
		echo "No username ('username' environment variable)!"
177
		return 1
178
	fi
179

    
180
	if [ -z "$localcli" ]; then
181
		if [ -z "$cs_addr" ]; then
182
			echo "No control station addresses ('cs_addr' environment variable)!"
183
			return 1
184
		fi
185
		#Choosing Cotrol Station. Code have to be "10"
186
		for CS in $cs_addr; do
187
			if [[ "10" = "$(ssh_check_cmd "$CS")" ]]; then
188
				PRIMARY_CS=$CS
189
				SSH="ssh -q $username@$PRIMARY_CS "
190
				break
191
			fi
192
		done
193

    
194
		if [ -z "$PRIMARY_CS" ]; then
195
			echo "No alive primary Control Station from list \"$cs_addr\"";
196
			return 1
197
		fi
198
	else
199
		if [ ! -f "$localcli" ]; then
200
			echo "Local CLI is set, but no binary found at $localcli!"
201
			return 1
202
		fi
203
		if [ -z "$blockpw" ]; then
204
			echo "No Password for Block Access ('blockpw' environment variable)!"
205
			return 1
206
		fi
207
		SSH=""
208
		NAVICLI="$localcli -User $username -Password $blockpw -Scope 0 "
209
	fi
210
	local probe_sp
211
	for probe_sp in $SPALL; do
212
		# shellcheck disable=SC2086
213
		if $SSH $NAVICLI -h "$probe_sp" >/dev/null 2>&1; then
214
			StorageProcessor="$probe_sp"
215
			break
216
		fi
217
	done
218
	[ -z "$StorageProcessor" ] && echo "No active Storage Processor found!" && return 1
219
	NAVICLI_NOSP="$NAVICLI -h"
220
	NAVICLI="$NAVICLI -h $StorageProcessor"
221
	return 0
222
}
223

    
224
if [ "$1" = "autoconf" ]; then
225
	check_conf_ans=$(check_conf_and_set_vars)
226
		if [ $? -eq 0 ]; then
227
			echo "yes"
228
		else
229
			echo "no ($check_conf_ans)"
230
		fi
231
		exit 0
232
fi
233

    
234
check_conf_and_set_vars 1>&2 || exit 1
235

    
236
run_remote() {
237
	if [ -z "$SSH" ]; then
238
		sh -c "$*"
239
	else
240
		$SSH "$*"
241
	fi
242
}
243

    
244
run_navicli() {
245
	run_remote "$NAVICLI" "$*"
246
}
247

    
248

    
249
# Get Lun List
250
LUNLIST=$(run_navicli lun -list -drivetype | sed -ne 's/^Name:\ *//p' | sort)
251

    
252
echo "host_name ${TARGET}"
253
echo
254

    
255
if [ "$1" = "config" ] ; then
256
	cat <<-EOF 
257
		multigraph emc_vnx_block_blocks
258
		graph_category disk
259
		graph_title EMC VNX 5300 LUN Blocks
260
		graph_vlabel Blocks Read (-) / Written (+)
261
		graph_args --base 1000
262
	EOF
263

    
264
	while read -r LUN ; do
265
		LUN="$(clean_fieldname "$LUN")"
266
		cat <<-EOF 
267
			${LUN}_read.label none
268
			${LUN}_read.graph no
269
			${LUN}_read.min 0
270
			${LUN}_read.draw AREA
271
			${LUN}_read.type COUNTER
272
			${LUN}_write.label $LUN Blocks
273
			${LUN}_write.negative ${LUN}_read
274
			${LUN}_write.type COUNTER
275
			${LUN}_write.min 0
276
			${LUN}_write.draw STACK
277
		EOF
278
	done <<< "$LUNLIST"
279

    
280
	cat <<-EOF
281

    
282
		multigraph emc_vnx_block_req
283
		graph_category disk
284
		graph_title EMC VNX 5300 LUN Requests
285
		graph_vlabel Requests: Read (-) / Write (+)
286
		graph_args --base 1000
287
	EOF
288
	while read -r LUN ; do
289
		LUN="$(clean_fieldname "$LUN")"
290
		cat <<-EOF
291
			${LUN}_readreq.label none
292
			${LUN}_readreq.graph no
293
			${LUN}_readreq.min 0
294
			${LUN}_readreq.type COUNTER
295
			${LUN}_writereq.label $LUN Requests
296
			${LUN}_writereq.negative ${LUN}_readreq
297
			${LUN}_writereq.type COUNTER
298
			${LUN}_writereq.min 0
299
		EOF
300
	done <<< "$LUNLIST"
301

    
302
	cat <<-EOF
303

    
304
		multigraph emc_vnx_block_ticks
305
		graph_category disk
306
		graph_title EMC VNX 5300 Counted Load per LUN
307
		graph_vlabel Load, % * Number of LUNs 
308
		graph_args --base 1000 -l 0 -r 
309
	EOF
310
	echo -n "graph_order "
311
	while read -r LUN ; do
312
		LUN="$(clean_fieldname "$LUN")"
313
		echo -n "${LUN}_busyticks ${LUN}_idleticks ${LUN}_bta=${LUN}_busyticks_spa ${LUN}_idleticks_spa ${LUN}_btb=${LUN}_busyticks_spb ${LUN}_idleticks_spb "
314
	done <<< "$LUNLIST"
315
	echo ""
316
	while read -r LUN ; do
317
		LUN="$(clean_fieldname "$LUN")"
318
		cat <<-EOF
319
			${LUN}_busyticks_spa.label $LUN Busy Ticks SPA
320
			${LUN}_busyticks_spa.type COUNTER
321
			${LUN}_busyticks_spa.graph no
322
			${LUN}_bta.label $LUN Busy Ticks SPA
323
			${LUN}_bta.graph no
324
			${LUN}_idleticks_spa.label $LUN Idle Ticks SPA
325
			${LUN}_idleticks_spa.type COUNTER
326
			${LUN}_idleticks_spa.graph no
327
			${LUN}_busyticks_spb.label $LUN Busy Ticks SPB
328
			${LUN}_busyticks_spb.type COUNTER
329
			${LUN}_busyticks_spb.graph no
330
			${LUN}_btb.label $LUN Busy Ticks SPB
331
			${LUN}_btb.graph no
332
			${LUN}_idleticks_spb.label $LUN Idle Ticks SPB
333
			${LUN}_idleticks_spb.type COUNTER
334
			${LUN}_idleticks_spb.graph no
335
			${LUN}_load_spa.label $LUN load SPA 
336
			${LUN}_load_spa.draw AREASTACK
337
			${LUN}_load_spb.label $LUN load SPB
338
			${LUN}_load_spb.draw AREASTACK
339
			${LUN}_load_spa.cdef 100,${LUN}_bta,${LUN}_busyticks_spa,${LUN}_idleticks_spa,+,/,*
340
			${LUN}_load_spb.cdef 100,${LUN}_btb,${LUN}_busyticks_spa,${LUN}_idleticks_spa,+,/,*
341
		EOF
342
	done <<< "$LUNLIST"
343

    
344
	cat <<-EOF
345
		
346
		multigraph emc_vnx_block_outstanding
347
		graph_category disk
348
		graph_title EMC VNX 5300 Sum of Outstanding Requests
349
		graph_vlabel Requests
350
		graph_args --base 1000
351
	EOF
352
	while read -r LUN ; do
353
		LUN="$(clean_fieldname "$LUN")"
354
		cat <<-EOF 
355
			${LUN}_outstandsum.label $LUN
356
			${LUN}_outstandsum.type COUNTER
357
		EOF
358
	done <<< "$LUNLIST"
359

    
360
	cat <<-EOF
361
		
362
		multigraph emc_vnx_block_nonzeroreq
363
		graph_category disk
364
		graph_title EMC VNX 5300 Non-Zero Request Count Arrivals
365
		graph_vlabel Count Arrivals
366
		graph_args --base 1000
367
	EOF
368
	while read -r LUN ; do
369
		LUN="$(clean_fieldname "$LUN")"
370
		cat <<-EOF
371
			${LUN}_nonzeroreq.label $LUN
372
			${LUN}_nonzeroreq.type COUNTER
373
		EOF
374
	done <<< "$LUNLIST"
375

    
376
	cat <<-EOF
377

    
378
		multigraph emc_vnx_block_trespasses
379
		graph_category disk
380
		graph_title EMC VNX 5300 Trespasses
381
		graph_vlabel Trespasses
382
	EOF
383
	while read -r LUN ; do
384
		LUN="$(clean_fieldname "$LUN")"
385
		cat <<-EOF
386
			${LUN}_implic_tr.label ${LUN} Implicit Trespasses
387
			${LUN}_explic_tr.label ${LUN} Explicit Trespasses
388
		EOF
389
	done <<< "$LUNLIST"
390

    
391
	cat <<-EOF
392

    
393
		multigraph emc_vnx_block_queue
394
		graph_category disk
395
		graph_title EMC VNX 5300 Counted Block Queue Length 
396
		graph_vlabel Length
397
	EOF
398
	while read -r LUN ; do
399
		LUN="$(clean_fieldname "$LUN")"
400
		cat <<-EOF
401
			${LUN}_busyticks_spa.label ${LUN}
402
			${LUN}_busyticks_spa.graph no
403
			${LUN}_busyticks_spa.type COUNTER
404
			${LUN}_idleticks_spa.label ${LUN}
405
			${LUN}_idleticks_spa.graph no
406
			${LUN}_idleticks_spa.type COUNTER
407
			${LUN}_busyticks_spb.label ${LUN}
408
			${LUN}_busyticks_spb.graph no
409
			${LUN}_busyticks_spb.type COUNTER
410
			${LUN}_idleticks_spb.label ${LUN}
411
			${LUN}_idleticks_spb.graph no
412
			${LUN}_idleticks_spb.type COUNTER
413
			${LUN}_outstandsum.label ${LUN}
414
			${LUN}_outstandsum.graph no
415
			${LUN}_outstandsum.type COUNTER
416
			${LUN}_nonzeroreq.label ${LUN}
417
			${LUN}_nonzeroreq.graph no
418
			${LUN}_nonzeroreq.type COUNTER
419
			${LUN}_readreq.label ${LUN}
420
			${LUN}_readreq.graph no
421
			${LUN}_readreq.type COUNTER
422
			${LUN}_writereq.label ${LUN}
423
			${LUN}_writereq.graph no
424
			${LUN}_writereq.type COUNTER
425
		EOF
426
		# Queue Length SPA = ((Sum of Outstanding Requests SPA - NonZero Request Count Arrivals SPA / 2)/(Host Read Requests SPA + Host Write Requests SPA))*
427
		# (Busy Ticks SPA/(Busy Ticks SPA + Idle Ticks SPA)
428
		# We count together SPA and SPB, although it is not fully corrext
429
		cat <<-EOF
430
			${LUN}_ql_l_a.label ${LUN} Queue Length SPA
431
			${LUN}_ql_l_a.cdef ${LUN}_outstandsum,${LUN}_nonzeroreq,2,/,-,${LUN}_readreq,${LUN}_writereq,+,/,${LUN}_busyticks_spa,*,${LUN}_busyticks_spa,${LUN}_idleticks_spa,+,/
432
			${LUN}_ql_l_b.label ${LUN} Queue Length SPB
433
			${LUN}_ql_l_b.cdef ${LUN}_outstandsum,${LUN}_nonzeroreq,2,/,-,${LUN}_readreq,${LUN}_writereq,+,/,${LUN}_busyticks_spb,*,${LUN}_busyticks_spb,${LUN}_idleticks_spb,+,/
434
		EOF
435
	done <<< "$LUNLIST"
436
	cat <<-EOF
437

    
438
		multigraph emc_vnx_block_ticks_total
439
		graph_category disk
440
		graph_title EMC VNX 5300 Counted Load per SP
441
		graph_vlabel Load, %
442
	EOF
443
	echo -n "graph_order "
444
	for SP in $SPALL; do
445
		SPclean="$(clean_fieldname "$SP")"
446
		echo -n "${SPclean}_total_bt=${SPclean}_total_busyticks "
447
	done
448
	echo ""
449
	for SP in $SPALL; do
450
		SPclean="$(clean_fieldname "$SP")"
451
		cat <<-EOF
452
			${SPclean}_total_busyticks.label ${SP}
453
			${SPclean}_total_busyticks.graph no
454
			${SPclean}_total_busyticks.type COUNTER 
455
			${SPclean}_total_bt.label ${SP}
456
			${SPclean}_total_bt.graph no
457
			${SPclean}_total_bt.type COUNTER 
458
			${SPclean}_total_idleticks.label ${SP}
459
			${SPclean}_total_idleticks.graph no
460
			${SPclean}_total_idleticks.type COUNTER
461
			${SPclean}_total_load.label ${SP} Total Load
462
			${SPclean}_total_load.cdef ${SPclean}_total_bt,${SPclean}_total_busyticks,${SPclean}_total_idleticks,+,/,100,*
463
		EOF
464
	done
465
	exit 0
466
fi
467

    
468
#Preparing big complex command to SP's to have most work done remotely.
469
#BIGCMD="$SSH"
470
while read -r LUN ; do
471
	FILTERLUN="$(clean_fieldname "$LUN")"
472
	BIGCMD+="$NAVICLI lun -list -name $LUN -perfData | 
473
		sed -ne 's/^Blocks Read\:\ */${FILTERLUN}_read.value /p; 
474
		s/^Blocks Written\:\ */${FILTERLUN}_write.value /p;
475
		s/Read Requests\:\ */${FILTERLUN}_readreq.value /p;
476
		s/Write Requests\:\ */${FILTERLUN}_writereq.value /p;
477
		s/Busy Ticks SP A\:\ */${FILTERLUN}_busyticks_spa.value /p;
478
		s/Idle Ticks SP A\:\ */${FILTERLUN}_idleticks_spa.value /p;
479
		s/Busy Ticks SP B\:\ */${FILTERLUN}_busyticks_spb.value /p;
480
		s/Idle Ticks SP B\:\ */${FILTERLUN}_idleticks_spb.value /p;
481
		s/Sum of Outstanding Requests\:\ */${FILTERLUN}_outstandsum.value /p;
482
		s/Non-Zero Request Count Arrivals\:\ */${FILTERLUN}_nonzeroreq.value /p;
483
		s/Implicit Trespasses\:\ */${FILTERLUN}_implic_tr.value /p;
484
		s/Explicit Trespasses\:\ */${FILTERLUN}_explic_tr.value /p;
485
		' ;  "
486
done <<< "$LUNLIST"
487
ANSWER=$(run_remote "$BIGCMD")
488

    
489
for SP in $SPALL; do
490
	FILTER_SP="$(clean_fieldname "$SP")"
491
	BIGCMD="getcontrol -cbt | sed -ne '
492
		s/Controller busy ticks\:\ */${FILTER_SP}_total_busyticks.value /p;
493
		s/Controller idle ticks\:\ */${FILTER_SP}_total_idleticks.value /p;
494
		'
495
	"
496
	ANSWER+=$'\n'$(run_remote "$NAVICLI_NOSP $SP" "$BIGCMD")
497
done
498

    
499
get_precise_answer_field() {
500
    echo "$ANSWER" | grep -F "_${1}."
501
}
502

    
503
echo "multigraph emc_vnx_block_blocks"
504
get_precise_answer_field "read"
505
get_precise_answer_field "write"
506
echo -e "\nmultigraph emc_vnx_block_req"
507
get_precise_answer_field "readreq"
508
get_precise_answer_field "writereq"
509

    
510
echo -e "\nmultigraph emc_vnx_block_ticks"
511
while read -r LUN ; do
512
	LUN="$(clean_fieldname "$LUN")"
513
	#Will count these values later, using cdef
514
	echo "${LUN}_load_spa.value 0"
515
	echo "${LUN}_load_spb.value 0"
516
done <<< "$LUNLIST"
517
get_precise_answer_field "busyticks_spa"
518
get_precise_answer_field "idleticks_spa"
519
get_precise_answer_field "busyticks_spb"
520
get_precise_answer_field "idleticks_spb"
521

    
522
echo -e "\nmultigraph emc_vnx_block_outstanding"
523
get_precise_answer_field "outstandsum"
524

    
525
echo -e "\nmultigraph emc_vnx_block_nonzeroreq"
526
get_precise_answer_field "nonzeroreq"
527

    
528
echo -e "\nmultigraph emc_vnx_block_trespasses"
529
get_precise_answer_field "implic_tr"
530
get_precise_answer_field "explic_tr"
531

    
532
echo -e "\nmultigraph emc_vnx_block_queue"
533
# Queue Length
534
get_precise_answer_field "busyticks_spa"
535
get_precise_answer_field "idleticks_spa"
536
get_precise_answer_field "busyticks_spb"
537
get_precise_answer_field "idleticks_spb"
538
get_precise_answer_field "outstandsum"
539
get_precise_answer_field "nonzeroreq"
540
get_precise_answer_field "readreq"
541
get_precise_answer_field "writereq"
542
while read -r LUN ; do
543
	LUN="$(clean_fieldname "$LUN")"
544
	#Will count these values later, using cdef
545
	echo "${LUN}_ql_l_a.value 0 "
546
	echo "${LUN}_ql_l_b.value 0 "
547
done <<< "$LUNLIST"
548

    
549
echo -e "\nmultigraph emc_vnx_block_ticks_total"
550
get_precise_answer_field "total_busyticks"
551
get_precise_answer_field "total_idleticks"
552
#Will count them later
553
for SP in $SPALL; do
554
	SP="$(clean_fieldname "$SP")"
555
	echo "${SP}_total_load.value 0"
556
done
557

    
558
exit 0