CPU Utilization Plugin For Nagios v1.0

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

#!/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=3
# 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/目录下,运行效果如下所示:

时间: 2024-08-01 08:58:03

CPU Utilization Plugin For Nagios v1.0的相关文章

接口性能测试方案 白皮书 V1.0

一. 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间.响应时间按软件的特点再可以细分,如对于一个 C/S 软件的响应时间可以细分为网络传输时间.应用服务器处理时间.数据库服务器处理时间.另外客户端自身也存在着解析时间.界面绘制呈现时间等. 响应时间主要站在客户端角度来看的一个性能指标,它是用户最关心.并且容易感知到的一个性能指标. 2. 吞吐率 吞吐率指单位时间内系统处理用户的请求数,从业务角度看,吞吐率可以用每秒请求数.每秒事

heatmap.js v1.0 到 v2.0,详细总结一下:)

前段时间,项目要开发热力图插件,研究了heatmap.js,打算好好总结一下. 本文主要有以下几部分内容: 部分源码理解 如何迁移到v2.0 v2.0官方文档译文 关于heatmap.js介绍,请看这里: http://www.oschina.net/p/heatmap-js 目前,对于热力图的开发,百度.高德开发平台上使用的都是这款JS开源库.当然,现在还有我们公司:P 百度示例:http://developer.baidu.com/map/jsdemo.htm#c1_15 高德示例:http

ImTOO.Video.Cutter.v1.0.34.0605.Incl.Keygen-Lz0

ImTOO.SWF.Converter.v5.1.26.1012.Incl.Keygen-Lz0\ ImTOO.Video.Converter.Ultimate.v5.1.26.1204.Incl.Keygen-Lz0\ ImTOO.Video.Cutter.v1.0.34.0605.Incl.Keygen-Lz0\ ImTOO.Video.Editor.v1.0.34.1231.Incl.Keygen-Lz0\ ImTOO.Video.Joiner.v1.0.34.1231.Incl.Keyg

Zabbix CPU utilization监控参数

工作中查看Zabbix linux 监控项的时候对linux 监控的cpu使用的各个参数没怎么明白,特意查看了下资料 Zabbix linux模板下的CPU utilization是自带的监控Linux CPU各个参数的监控项,其实就是Linux下top命令显示的cpu信息. Zabbix下的监控信息,有时候直观的看图会一脸懵逼,各个值分别是什么意思呢? 官方解释,Cpu(s)表示的是cpu信息. us: user cpu time (or) % CPU time spent in user s

Linux系统部署规范v1.0

Linux系统部署规范v1.0 目的: 1.尽可能减少线上操作: 2.尽可能实现自动化部署: 3.尽可能减少安装服务和启动的服务: 4.尽可能使用安全协议提供服务: 5.尽可能让业务系统单一: 6.尽可能监控可监控的一切信息: 7.尽可能控制一切可控制的安全策略: 8.尽可能定期更新补丁修补漏洞: 具体规范: A. 帐户和口令 帐户: 1.为每个系统维护人员建立一个独立的普通权限帐号,为监控机建立监控帐号,分别用于日常系统维护和系统监控: 2.FTP 服务器配置虚拟帐号: 3.禁止除root 帐

【资源共享】RK3399《CPU-Freq开发指南 V1.0.1》

CPU的频率高低会影响产品的性能与稳定 这个文档是RK3399的CPU频率相关的开发文档:<CPU-Freq开发指南 V1.0.1>  下载地址:http://developer.t-firefly.com/thread-12533-1-1.html

压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate

分类: 4.软件设计/架构/测试 2010-01-12 19:58 34241人阅读 评论(4) 收藏 举报 测试loadrunnerlinux服务器firebugthread 上篇讲如何用LoadRunner监控Linux的性能指标 ,但是关于CPU的几个指标没有搞清楚,下面就详细说说. CPU Utilization 好理解,就是CPU的利用率,75%以上就比较高了(也有说法是80%或者更高).除了这个指标外,还要结合Load Average和Context Switch Rate来看,有可

CactiFans v1.0中文版特性

http://blog.csdn.net/big1980/article/details/9341743 CactiFans v1.0中文版特性 基于CentOS6.2构建,集成了cacti 0.8.8a 中文版(目前最新版),rrdtool 1.4.7(目前最新) 集成nagios 3.3.1,nconf 1.3(管理nagios的一个工具) 集成phpMyAdmin-3.5.0  webmin-1.580 集成 syslog,npc.routerconfigs,weathermap,moni

01原始编译r16的tinav2.5(分色排版)V1.0

01原始编译r16的tinav2.5 2017/12/14 11:44 版本:V1.0 0.(可选)验证一下SDK的MD5值! [email protected]:/home/wwt$ [email protected]:/home/wwt$ md5sum tinav2.5_20171205.tar.gz 17295b52f2cc5d3a8d75274e85961923  tinav2.5_20171205.tar.gz [email protected]:/home/wwt$ 1.原始编译r4