天天看點

CPU Utilization Plugin For Nagios v2.0

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 ] &amp;&amp; [ ${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 ] &amp;&amp; [ ${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 ] &amp;&amp; [ ${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,如需轉載請自行聯系原作者