1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<code>#!/bin/bash</code>
<code># CPU Utilization Statistics plugin for Nagios</code>
<code>IOSTAT=</code><code>"/usr/bin/iostat"</code>
<code># Nagios return codes</code>
<code>STATE_OK=0</code>
<code>STATE_WARNING=1</code>
<code>STATE_CRITICAL=2</code>
<code>STATE_UNKNOWN=3</code>
<code># Plugin parameters value if not define </code>
<code>LIST_WARNING_THRESHOLD=</code><code>"70,40,30"</code>
<code>LIST_CRITICAL_THRESHOLD=</code><code>"90,60,40"</code>
<code>INTERVAL_SEC=1</code>
<code>NUM_REPORT=5</code>
<code># Plugin variable description</code>
<code>PROGNAME=$(</code><code>basename</code> <code>$0)</code>
<code>if</code> <code>[ ! -x $IOSTAT ]; </code><code>then</code>
<code> </code><code>echo</code> <code>"UNKNOWN: iostat not found or is not executable by the nagios user."</code>
<code> </code><code>exit</code> <code>$STATE_UNKNOWN</code>
<code>fi</code>
<code>print_usage() {</code>
<code> </code><code>echo</code> <code>""</code>
<code> </code><code>echo</code> <code>"$PROGNAME $RELEASE - CPU Utilization check script for Nagios"</code>
<code> </code><code>echo</code> <code>"Usage: check_cpu_utili.sh -w -c (-i -n)"</code>
<code> </code><code>echo</code> <code>" -w Warning threshold in % for warn_user,warn_system,warn_iowait CPU (default : 70,40,30)"</code>
<code> </code><code>echo</code> <code>" Exit with WARNING status if cpu exceeds warn_n"</code>
<code> </code><code>echo</code> <code>" -c Critical threshold in % for crit_user,crit_system,crit_iowait CPU (default : 90,60,40)"</code>
<code> </code><code>echo</code> <code>" Exit with CRITICAL status if cpu exceeds crit_n"</code>
<code> </code><code>echo</code> <code>" -i Interval in seconds for iostat (default : 1)"</code>
<code> </code><code>echo</code> <code>" -n Number report for iostat (default : 3)"</code>
<code> </code><code>echo</code> <code>" -h Show this page"</code>
<code> </code><code>echo</code> <code>"Usage: $PROGNAME"</code>
<code> </code><code>echo</code> <code>"Usage: $PROGNAME --help"</code>
<code> </code><code>echo</code> <code>""</code>
<code> </code><code>exit</code> <code>0</code>
<code>}</code>
<code>print_help() {</code>
<code> </code><code>print_usage</code>
<code> </code><code>echo</code> <code>"This plugin will check cpu utilization (user,system,CPU_Iowait in %)"</code>
<code># Parse parameters</code>
<code>while</code> <code>[ $</code><code># -gt 0 ]; do</code>
<code> </code><code>case</code> <code>"$1"</code> <code>in</code>
<code> </code><code>-h | --help)</code>
<code> </code><code>print_help</code>
<code> </code><code>exit</code> <code>$STATE_OK</code>
<code> </code><code>;;</code>
<code> </code><code>-</code><code>v</code> <code>| --version)</code>
<code> </code><code>print_release</code>
<code> </code><code>exit</code> <code>$STATE_OK</code>
<code> </code><code>;;</code>
<code> </code><code>-w | --warning)</code>
<code> </code><code>shift</code>
<code> </code><code>LIST_WARNING_THRESHOLD=$1</code>
<code> </code><code>-c | --critical)</code>
<code> </code><code>shift</code>
<code> </code><code>LIST_CRITICAL_THRESHOLD=$1</code>
<code> </code><code>-i | --interval)</code>
<code> </code><code>INTERVAL_SEC=$1</code>
<code> </code><code>-n | --number)</code>
<code> </code><code>NUM_REPORT=$1</code>
<code> </code><code>;; </code>
<code> </code><code>*) </code><code>echo</code> <code>"Unknown argument: $1"</code>
<code> </code><code>print_usage</code>
<code> </code><code>exit</code> <code>$STATE_UNKNOWN</code>
<code> </code><code>esac</code>
<code>shift</code>
<code>done</code>
<code># List to Table for warning threshold (compatibility with </code>
<code>TAB_WARNING_THRESHOLD=(`</code><code>echo</code> <code>$LIST_WARNING_THRESHOLD | </code><code>sed</code> <code>'s/,/ /g'</code><code>`)</code>
<code>#declare -a TAB_WARNIG_THRESHOLD</code>
<code>if</code> <code>[ </code><code>"${#TAB_WARNING_THRESHOLD[@]}"</code> <code>-</code><code>ne</code> <code>"3"</code> <code>]; </code><code>then</code>
<code> </code><code>echo</code> <code>"ERROR : Bad count parameter in Warning Threshold"</code>
<code> </code><code>exit</code> <code>$STATE_WARNING</code>
<code>else</code>
<code>USER_WARNING_THRESHOLD=`</code><code>echo</code> <code>${TAB_WARNING_THRESHOLD[0]}`</code>
<code>SYSTEM_WARNING_THRESHOLD=`</code><code>echo</code> <code>${TAB_WARNING_THRESHOLD[1]}`</code>
<code>IOWAIT_WARNING_THRESHOLD=`</code><code>echo</code> <code>${TAB_WARNING_THRESHOLD[2]}` </code>
<code># List to Table for critical threshold</code>
<code>TAB_CRITICAL_THRESHOLD=(`</code><code>echo</code> <code>$LIST_CRITICAL_THRESHOLD | </code><code>sed</code> <code>'s/,/ /g'</code><code>`)</code>
<code>if</code> <code>[ </code><code>"${#TAB_CRITICAL_THRESHOLD[@]}"</code> <code>-</code><code>ne</code> <code>"3"</code> <code>]; </code><code>then</code>
<code> </code><code>echo</code> <code>"ERROR : Bad count parameter in CRITICAL Threshold"</code>
<code>USER_CRITICAL_THRESHOLD=`</code><code>echo</code> <code>${TAB_CRITICAL_THRESHOLD[0]}`</code>
<code>SYSTEM_CRITICAL_THRESHOLD=`</code><code>echo</code> <code>${TAB_CRITICAL_THRESHOLD[1]}`</code>
<code>IOWAIT_CRITICAL_THRESHOLD=`</code><code>echo</code> <code>${TAB_CRITICAL_THRESHOLD[2]}`</code>
<code>if</code> <code>[ ${TAB_WARNING_THRESHOLD[0]} -</code><code>ge</code> <code>${TAB_CRITICAL_THRESHOLD[0]} -o ${TAB_WARNING_THRESHOLD[1]} -</code><code>ge</code> <code>${TAB_CRITICAL_THRESHOLD[1]} -o ${TAB_WARNING_THRESHOLD[2]} -</code><code>ge</code> <code>${TAB_CRITICAL_THRESHOLD[2]} ]; </code><code>then</code>
<code> </code><code>echo</code> <code>"ERROR : Critical CPU Threshold lower as Warning CPU Threshold "</code>
<code>CPU_REPORT=`iostat -c $INTERVAL_SEC $NUM_REPORT | </code><code>sed</code> <code>-e </code><code>'s/,/./g'</code> <code>| </code><code>tr</code> <code>-s </code><code>' '</code> <code>';'</code> <code>| </code><code>sed</code> <code>'/^$/d'</code> <code>| </code><code>tail</code> <code>-1`</code>
<code>CPU_REPORT_SECTIONS=`</code><code>echo</code> <code>${CPU_REPORT} | </code><code>grep</code> <code>';'</code> <code>-o | </code><code>wc</code> <code>-l`</code>
<code>CPU_USER=`</code><code>echo</code> <code>$CPU_REPORT | </code><code>cut</code> <code>-d </code><code>";"</code> <code>-f 2`</code>
<code>CPU_SYSTEM=`</code><code>echo</code> <code>$CPU_REPORT | </code><code>cut</code> <code>-d </code><code>";"</code> <code>-f 4`</code>
<code>CPU_IOWAIT=`</code><code>echo</code> <code>$CPU_REPORT | </code><code>cut</code> <code>-d </code><code>";"</code> <code>-f 5`</code>
<code> </code><code>CPU_STEAL=`</code><code>echo</code> <code>$CPU_REPORT | </code><code>cut</code> <code>-d </code><code>";"</code> <code>-f 6`</code>
<code> </code><code>CPU_IDLE=`</code><code>echo</code> <code>$CPU_REPORT | </code><code>cut</code> <code>-d </code><code>";"</code> <code>-f 7`</code>
<code> </code><code>NAGIOS_DATA=</code><code>"user=${CPU_USER}%,system=${CPU_SYSTEM}%,iowait=${CPU_IOWAIT}%,idle=${CPU_IDLE}%"</code>
<code># Add for integer shell issue</code>
<code>CPU_USER_MAJOR=`</code><code>echo</code> <code>$CPU_USER| </code><code>cut</code> <code>-d </code><code>"."</code> <code>-f 1`</code>
<code>CPU_SYSTEM_MAJOR=`</code><code>echo</code> <code>$CPU_SYSTEM | </code><code>cut</code> <code>-d </code><code>"."</code> <code>-f 1`</code>
<code>CPU_IOWAIT_MAJOR=`</code><code>echo</code> <code>$CPU_IOWAIT | </code><code>cut</code> <code>-d </code><code>"."</code> <code>-f 1`</code>
<code>CPU_IDLE_MAJOR=`</code><code>echo</code> <code>$CPU_IDLE | </code><code>cut</code> <code>-d </code><code>"."</code> <code>-f 1`</code>
<code>CPU_VMSTAT_R=`vmstat 1 4 | </code><code>sed</code> <code>-n </code><code>'3,$'</code><code>p | </code><code>awk</code> <code>'BEGINE{SUM=0} {SUM += $1} END {print SUM/4}'</code> <code>`</code>
<code># Return</code>
<code>if</code> <code>[ ${CPU_USER_MAJOR} -</code><code>ge</code> <code>$USER_CRITICAL_THRESHOLD ]; </code><code>then</code>
<code> </code><code>echo</code> <code>"CPU STATISTICS OK : ${NAGIOS_DATA} The averange value of r in vmstat :${CPU_VMSTAT_R}"</code>
<code> </code><code>exit</code> <code>$STATE_CRITICAL</code>
<code> </code><code>elif</code> <code>[ ${CPU_SYSTEM_MAJOR} -</code><code>ge</code> <code>$SYSTEM_CRITICAL_THRESHOLD ]; </code><code>then</code>
<code> </code><code>echo</code> <code>"CPU STATISTICS OK : ${NAGIOS_DATA} The averange value of r in vmstat :${CPU_VMSTAT_R}"</code>
<code> </code><code>elif</code> <code>[ ${CPU_IOWAIT_MAJOR} -</code><code>ge</code> <code>$IOWAIT_CRITICAL_THRESHOLD ]; </code><code>then</code>
<code> </code><code>elif</code> <code>[ ${CPU_USER_MAJOR} -</code><code>ge</code> <code>$USER_WARNING_THRESHOLD ] && [ ${CPU_USER_MAJOR} -lt $USER_CRITICAL_THRESHOLD ]; </code><code>then</code>
<code> </code><code>#echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}"</code>
<code> </code><code>exit</code> <code>$STATE_WARNING </code>
<code> </code><code>elif</code> <code>[ ${CPU_SYSTEM_MAJOR} -</code><code>ge</code> <code>$SYSTEM_WARNING_THRESHOLD ] && [ ${CPU_SYSTEM_MAJOR} -lt $SYSTEM_CRITICAL_THRESHOLD ]; </code><code>then</code>
<code> </code><code>elif</code> <code>[ ${CPU_IOWAIT_MAJOR} -</code><code>ge</code> <code>$IOWAIT_WARNING_THRESHOLD ] && [ ${CPU_IOWAIT_MAJOR} -lt $IOWAIT_CRITICAL_THRESHOLD ]; </code><code>then</code>
<code> </code><code>exit</code> <code>$STATE_WARNING</code>
<code> </code><code>#echo "The averange value of r in vmstat :${CPU_VMSTAT_R}\c" </code>
<code> </code><code>echo</code> <code>"CPU STATISTICS OK : ${NAGIOS_DATA};The averange value of r in vmstat:${CPU_VMSTAT_R}"</code>
<code> </code><code>exit</code> <code>$STATE_OK</code>
将腳本作為Nagios插件放入server端的/usr/local/nagios/libexec/目錄下,運作效果如下所示:
<a href="http://s3.51cto.com/wyfs02/M01/6F/EF/wKiom1WtseqjP5JwAACkN4khlog993.jpg" target="_blank"></a>
本文轉自 撫琴煮酒 51CTO部落格,原文連結:http://blog.51cto.com/yuhongchun/1676639,如需轉載請自行聯系原作者