CPU Utilization Plugin For Nagios v2.0

简介:

此脚本参考了Nagios的官方文档https://exchange.nagios.org/并其进行了代码精简和移值,原代码是运行在ksh下面的,定义数组的方式跟bash还是有区别的;另外,为了反映CPU的繁忙程度,特的抓取了vmstart命令中的平均值并将其打印出来。为了方便大家下载,特的将其收录进了我的github中。

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
#!/bin/bash
# CPU Utilization Statistics plugin for Nagios
IOSTAT= "/usr/bin/iostat"
# Nagios return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
 
# Plugin parameters value if not define 
LIST_WARNING_THRESHOLD= "70,40,30"
LIST_CRITICAL_THRESHOLD= "90,60,40"
INTERVAL_SEC=1
NUM_REPORT=5
# Plugin variable description
PROGNAME=$( basename  $0)
 
if  [ ! -x $IOSTAT ];  then
     echo  "UNKNOWN: iostat not found or is not executable by the nagios user."
     exit  $STATE_UNKNOWN
fi
 
print_usage() {
         echo  ""
         echo  "$PROGNAME $RELEASE - CPU Utilization check script for Nagios"
         echo  ""
         echo  "Usage: check_cpu_utili.sh -w -c (-i -n)"
         echo  ""
         echo  "  -w  Warning threshold in % for warn_user,warn_system,warn_iowait CPU (default : 70,40,30)"
         echo  "  Exit with WARNING status if cpu exceeds warn_n"
         echo  "  -c  Critical threshold in % for crit_user,crit_system,crit_iowait CPU (default : 90,60,40)"
         echo  "  Exit with CRITICAL status if cpu exceeds crit_n"
         echo  "  -i  Interval in seconds for iostat (default : 1)"
         echo  "  -n  Number report for iostat (default : 3)"
         echo  "  -h  Show this page"
         echo  ""
     echo  "Usage: $PROGNAME"
     echo  "Usage: $PROGNAME --help"
     echo  ""
     exit  0
}
 
print_help() {
     print_usage
         echo  ""
         echo  "This plugin will check cpu utilization (user,system,CPU_Iowait in %)"
         echo  ""
     exit  0
}
 
# Parse parameters
while  [ $ # -gt 0 ]; do
     case  "$1"  in
         -h | --help)
             print_help
             exit  $STATE_OK
             ;;
         - v  | --version)
                 print_release
                 exit  $STATE_OK
                 ;;
         -w | --warning)
                 shift
                 LIST_WARNING_THRESHOLD=$1
                 ;;
         -c | --critical)
                shift
                 LIST_CRITICAL_THRESHOLD=$1
                 ;;
         -i | --interval)
                shift
                INTERVAL_SEC=$1
                 ;;
         -n | --number)
                shift
                NUM_REPORT=$1
                 ;;        
         *)   echo  "Unknown argument: $1"
             print_usage
             exit  $STATE_UNKNOWN
             ;;
         esac
shift
done
 
# List to Table for warning threshold (compatibility with 
TAB_WARNING_THRESHOLD=(` echo  $LIST_WARNING_THRESHOLD |  sed  's/,/ /g' `)
#declare -a TAB_WARNIG_THRESHOLD
if  "${#TAB_WARNING_THRESHOLD[@]}"  - ne  "3"  ];  then
   echo  "ERROR : Bad count parameter in Warning Threshold"
   exit  $STATE_WARNING
else
USER_WARNING_THRESHOLD=` echo  ${TAB_WARNING_THRESHOLD[0]}`
SYSTEM_WARNING_THRESHOLD=` echo  ${TAB_WARNING_THRESHOLD[1]}`
IOWAIT_WARNING_THRESHOLD=` echo  ${TAB_WARNING_THRESHOLD[2]}` 
fi
 
# List to Table for critical threshold
TAB_CRITICAL_THRESHOLD=(` echo  $LIST_CRITICAL_THRESHOLD |  sed  's/,/ /g' `)
if  "${#TAB_CRITICAL_THRESHOLD[@]}"  - ne  "3"  ];  then
   echo  "ERROR : Bad count parameter in CRITICAL Threshold"
   exit  $STATE_WARNING
else
USER_CRITICAL_THRESHOLD=` echo  ${TAB_CRITICAL_THRESHOLD[0]}`
SYSTEM_CRITICAL_THRESHOLD=` echo  ${TAB_CRITICAL_THRESHOLD[1]}`
IOWAIT_CRITICAL_THRESHOLD=` echo  ${TAB_CRITICAL_THRESHOLD[2]}`
fi
 
if  [ ${TAB_WARNING_THRESHOLD[0]} - ge  ${TAB_CRITICAL_THRESHOLD[0]} -o ${TAB_WARNING_THRESHOLD[1]} - ge  ${TAB_CRITICAL_THRESHOLD[1]} -o ${TAB_WARNING_THRESHOLD[2]} - ge  ${TAB_CRITICAL_THRESHOLD[2]} ];  then
   echo  "ERROR : Critical CPU Threshold lower as Warning CPU Threshold "
   exit  $STATE_WARNING
fi
 
CPU_REPORT=`iostat -c $INTERVAL_SEC $NUM_REPORT |  sed  -e  's/,/./g'  tr  -s  ' '  ';'  sed  '/^$/d'  tail  -1`
CPU_REPORT_SECTIONS=` echo  ${CPU_REPORT} |  grep  ';'  -o |  wc  -l`
CPU_USER=` echo  $CPU_REPORT |  cut  -d  ";"  -f 2`
CPU_SYSTEM=` echo  $CPU_REPORT |  cut  -d  ";"  -f 4`
CPU_IOWAIT=` echo  $CPU_REPORT |  cut  -d  ";"  -f 5`
 
     CPU_STEAL=` echo  $CPU_REPORT |  cut  -d  ";"  -f 6`
     CPU_IDLE=` echo  $CPU_REPORT |  cut  -d  ";"  -f 7`
     NAGIOS_DATA= "user=${CPU_USER}%,system=${CPU_SYSTEM}%,iowait=${CPU_IOWAIT}%,idle=${CPU_IDLE}%"
 
 
# Add for integer shell issue
CPU_USER_MAJOR=` echo  $CPU_USER|  cut  -d  "."  -f 1`
CPU_SYSTEM_MAJOR=` echo  $CPU_SYSTEM |  cut  -d  "."  -f 1`
CPU_IOWAIT_MAJOR=` echo  $CPU_IOWAIT |  cut  -d  "."  -f 1`
CPU_IDLE_MAJOR=` echo  $CPU_IDLE |  cut  -d  "."  -f 1`
CPU_VMSTAT_R=`vmstat 1 4 |  sed  -n  '3,$' p  |  awk  'BEGINE{SUM=0} {SUM += $1} END {print SUM/4}'  `
 
# Return
if  [ ${CPU_USER_MAJOR} - ge  $USER_CRITICAL_THRESHOLD ];  then
         echo  "CPU STATISTICS OK : ${NAGIOS_DATA} The averange value of r in vmstat :${CPU_VMSTAT_R}"
         exit  $STATE_CRITICAL
     elif  [ ${CPU_SYSTEM_MAJOR} - ge  $SYSTEM_CRITICAL_THRESHOLD ];  then
         echo  "CPU STATISTICS OK : ${NAGIOS_DATA}  The averange value of r in vmstat :${CPU_VMSTAT_R}"
         exit  $STATE_CRITICAL
     elif  [ ${CPU_IOWAIT_MAJOR} - ge  $IOWAIT_CRITICAL_THRESHOLD ];  then
         echo  "CPU STATISTICS OK : ${NAGIOS_DATA}  The averange value of r in vmstat :${CPU_VMSTAT_R}"
         exit  $STATE_CRITICAL
     elif  [ ${CPU_USER_MAJOR} - ge  $USER_WARNING_THRESHOLD ] && [ ${CPU_USER_MAJOR} -lt $USER_CRITICAL_THRESHOLD ];  then
         #echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}"
         echo  "CPU STATISTICS OK : ${NAGIOS_DATA}  The averange value of r in vmstat :${CPU_VMSTAT_R}"
         exit  $STATE_WARNING 
       elif  [ ${CPU_SYSTEM_MAJOR} - ge  $SYSTEM_WARNING_THRESHOLD ] && [ ${CPU_SYSTEM_MAJOR} -lt $SYSTEM_CRITICAL_THRESHOLD ];  then
         #echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}"
         echo  "CPU STATISTICS OK : ${NAGIOS_DATA}  The averange value of r in vmstat :${CPU_VMSTAT_R}"
         exit  $STATE_WARNING 
       elif   [ ${CPU_IOWAIT_MAJOR} - ge  $IOWAIT_WARNING_THRESHOLD ] && [ ${CPU_IOWAIT_MAJOR} -lt $IOWAIT_CRITICAL_THRESHOLD ];  then
         #echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}"
         echo  "CPU STATISTICS OK : ${NAGIOS_DATA}  The averange value of r in vmstat :${CPU_VMSTAT_R}"
         exit  $STATE_WARNING
else
 
         #echo "The averange value of r in vmstat :${CPU_VMSTAT_R}\c" 
         echo  "CPU STATISTICS OK : ${NAGIOS_DATA};The averange value of r in vmstat:${CPU_VMSTAT_R}"
         exit  $STATE_OK
fi

将脚本作为Nagios插件放入server端的/usr/local/nagios/libexec/目录下,运行效果如下所示:

wKiom1WtseqjP5JwAACkN4khlog993.jpg








本文转自 抚琴煮酒 51CTO博客,原文链接:http://blog.51cto.com/yuhongchun/1676639,如需转载请自行联系原作者
目录
相关文章
|
30天前
|
JSON Java Serverless
nacos常见问题之cpu和内存占用高如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
152 0
|
3月前
|
Linux
|
2月前
|
弹性计算
2024阿里云幻兽帕鲁/Palworld服务器价格表(CPU/内存/带宽/磁盘收费标准)
2024年阿里云幻兽帕鲁专用服务器的价格根据不同的配置有所不同。 • 4核16G配置的价格为32元/月,如果选择购买3个月,则价格为96元。 • 8核32G配置的价格为90元/月,如果选择购买3个月,则价格为271元。 另外,还有配置为4核16G10M带宽的服务器,其价格为26元/月起。而8核32G10M带宽的价格也是90元/月。
95 1
|
2天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
3月前
|
监控 关系型数据库 MySQL
innodb_buffer_pool_instances 如何根据cpu和内存进行配置
`innodb_buffer_pool_instances` 是用于配置 InnoDB 缓冲池实例数的参数。每个实例都管理缓冲池的一部分,这有助于提高并发性能。通常,你可以根据系统的 CPU 和内存来调整这个参数,以获得更好的性能。 以下是一些建议和步骤,帮助你根据 CPU 和内存进行 `innodb_buffer_pool_instances` 的配置: 1. **了解系统资源:** 首先,了解系统的硬件资源,特别是内存和CPU。检查系统上可用的物理内存和 CPU 核心数量。 2. **考虑每个实例的大小:** 在配置 `innodb_buffer_pool_instances` 时,
|
3月前
|
存储 缓存 关系型数据库
【如何选择Mysql服务器的CPU核数及内存大小】
【如何选择Mysql服务器的CPU核数及内存大小】
108 0
|
23天前
|
存储 缓存 PHP
阿里云服务器实例、CPU内存、带宽、操作系统选择参考
对于使用阿里云服务器的用户来说,云服务器的选择和使用非常重要,如果实例、内存、CPU、带宽等配置选择错误,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文为大家介绍一下阿里云服务器实例、CPU内存、带宽、操作系统的选择注意事项,以供参考。
阿里云服务器实例、CPU内存、带宽、操作系统选择参考
|
1月前
|
弹性计算 固态存储 Linux
2024年阿里云服务器租用详细价格表(CPU/内存/带宽/系统盘)
2024阿里云服务器租用优惠价格表,轻量服务器2核2G3M带宽轻量服务器一年61元,2核4G4M带宽轻量服务器一年165元12个月,ECS云服务器e系列2核2G配置、3M固定带宽、40G ESSD Entry云盘,99元一年、2核4G服务器30元3个月、2核4G配置365元一年、2核8G配置522元一年,云服务器u1、云服务器c7、g7和r7优惠价格表,CPU内存带宽系统盘配置详细报价:
742 3
|
1月前
|
弹性计算 固态存储 调度
阿里云服务器部署配置选择全攻略,ECS实例规格、CPU内存配置
阿里云服务器部署配置选择全攻略,ECS实例规格、CPU内存配置,CPU内存、公网带宽和系统盘怎么选择?个人用户选择轻量应用服务器或ECS通用算力型u1云服务器,企业用户选择ECS计算型c7、通用型g7云服务器,阿里云百科分享阿里云服务器配置选择方法
|
1月前
|
弹性计算 固态存储 调度
阿里云服务器选购指南_2024新版CPU内存带宽系统盘选择攻略
阿里云服务器选购指南_2024新版CPU内存带宽系统盘选择攻略,CPU内存、公网带宽和系统盘怎么选择?个人用户选择轻量应用服务器或ECS通用算力型u1云服务器,企业用户选择ECS计算型c7、通用型g7云服务器,阿里云百科分享阿里云服务器配置选择方法