我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Shell脚本编写Nagios插件监控程序资源占用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Shell脚本编写Nagios插件监控程序资源占用

一般情况下,我们只需要监控程序进程在没在就可以了。但是这次遭遇了这样的事,公司开发的程序,程序进程还在,但是死锁了。导致大范围的影响,更要命的是根本不知道问题出在哪里,还是别的测试部同事帮忙发现的,真是丢尽运维的脸了…
为避免下次再遭遇到这样的情况,分析了这次进程死锁的现象,发现死锁会占用100%的cpu,正常情况下只占用10%以内。决定编写nagios插件,用来监控程序占用的资源,包括cpu,内存等。

一、shell脚本需求分析:

能设置cpu,mem的阈值,资源占用超过阈值就报警。
要能判断这个进程是否存在,若有一个不存在,则报警。

二、shell脚本执行效果如下:

1、如果输入格式不正确,则输出帮助信息

[root@center230 libexec]# shcomponent_resource.sh

Usage parament:

   component_resource.sh [--cpu] [--mem]

 

Example:

   component_resource.sh --cpu 50 --mem 50

2、若没超出阈值,输出资源占用情况,退出值为0

[root@center230 libexec]# shcomponent_resource.sh  --cpu 50 --mem 50

VueSERVER_cpu_use=5.6% VueCache_cpu_use=1.9%VueAgent_cpu_use=0.0% VueCenter_cpu_use=0.0% VueDaemon_cpu_use=0.0%;VueSERVER_mem_use=0.2% VueCache_mem_use=7.4% VueAgent_mem_use=0.5% VueCenter_mem_use=0.1%VueDaemon_mem_use=0.0%

[root@center230 libexec]# echo $?

0

3、若超出阈值,输出资源占用情况,退出值为2

[root@center230 libexec]# shcomponent_resource.sh  --cpu 5 --mem 5

VueSERVER_cpu_use=9.4% VueCache_cpu_use=0.0%VueAgent_cpu_use=0.0% VueCenter_cpu_use=0.0% VueDaemon_cpu_use=0.0%;VueSERVER_mem_use=0.2% VueCache_mem_use=7.4% VueAgent_mem_use=0.5%VueCenter_mem_use=0.1% VueDaemon_mem_use=0.0%

[root@center230 libexec]# echo $?

2

4、若进程不存在,输出down掉的进程,以及正常使用中的进程资源情况,退出值为2

[root@yckj scripts]# sh component_resource.sh--cpu 50 --mem 50

Current VueDaemon VueCenter VueAgent VueCache VueSERVER is down. 

[root@yckj scripts]# echo $?

2

三、Shell脚本代码如下:

[root@center230 libexec]# catcomponent_resource.sh

#!/bin/sh

#author:yangrong

#date:2014-05-20

#mail:10286460@qq.com

  

#pragrom_list=(VueDaemon VueCenter VueAgentVueCache VueSERVER VUEConnector Myswitch Slirpvde)

pragrom_list=(VueDaemon VueCenter VueAgentVueCache VueSERVER)

  

####获取cpu阈值和mem阈值#######

case $1 in

 --cpu)

   cpu_crit=$2

  ;;

 --mem)

   mem_crit=$2

  ;;

esac

  

case $3 in

 --cpu)

   cpu_crit=$4

  ;;

 --mem)

   mem_crit=$4

  ;;

esac

  

  

  

###判断传参数量,如果不为4,则var值为1,var0则正常####

if [[ $1 == $3  ]];then

       var=1   

elif [ $# -ne 4 ] ;then

       var=1

else

       var=0

fi

  

  

###打印错误提示信息

if [ $var -eq 1 ];then

   echo "Usage parament:"

   echo "    $0 [--cpu][--mem]"

   echo ""

   echo "Example:"

   echo "    $0 --cpu 50 --mem50"

   exit

fi

  

  

###把不存在的进程放一变量中

num=$(( ${#pragrom_list[@]}-1 ))

  

NotExist=""

for digit in `seq 0 $num`

do

 a=`ps -ef|grep -v grep |grep ${pragrom_list[$digit]}|wc -l`

  if[ $a -eq 0 ];then

    NotExist="$NotExist ${pragrom_list[$digit]}"

    unset pragrom_list[$digit]

  fi

done

#echo"pragrom_list=${pragrom_list[@]}"

  

  

  

####对比进程所占资源与阈值大小

cpu_use_all=""

mem_use_all=""

compare_cpu_temp=0

compare_mem_temp=0

for n in ${pragrom_list[@]}

do

  cpu_use=`top -b -n1|grep $n|awk '{print $9}'`

  mem_use=`top -b -n1|grep $n|awk '{print $10}'`

   if[[ $cpu_use == "" ]];then

       cpu_use=0

   fi

   if[[ $mem_use == "" ]];then

       mem_use=0

   fi

  

  compare_cpu=`echo "$cpu_use > $cpu_crit"|bc`

  compare_mem=`echo "$mem_use > $mem_crit"|bc`  

   if[[ $compare_cpu == 1  ]];then

       compare_cpu_temp=1

   fi

   if[[ $compare_mem == 1  ]];then

       compare_mem_temp=1

   fi

  

  cpu_use_all="${n}_cpu_use=${cpu_use}% ${cpu_use_all}"

  mem_use_all="${n}_mem_use=${mem_use}% ${mem_use_all}"

done

  

  

###如果该变量有值,则代表有进程down。则退出值为2

if [[ "$NotExist" != ""]];then

 echo -e "Current ${NotExist} isdown.$cpu_use_all;$mem_use_all"

 exit 2

###如果cpu比较值为1,则代表有进程占用超过阈值,则退出值为2

elif [[ "$compare_cpu_temp" == 1]];then

   echo -e "$cpu_use_all;$mem_use_all"

   exit 2

  

##如果mem比较值为1,则代表为进程mem占用超过阈值,则退出值为2

elif [[ $compare_mem_temp == 1 ]];then

   echo -e "$cpu_use_all;$mem_use_all"

   exit 2

##否则则正常输出,并输出所占cpu与内存比例

else

   echo -e "$cpu_use_all;$mem_use_all"

   exit 0

fi

四、后话:

随着近日编写shell脚本越来越多,有时难免会回改以前所写脚本,经常要看一段时间才能看懂。
为方便后续的维护,在脚本当中,每一个函数,每一段功能,都做备注,方便以后自己或他人来进行维护。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Shell脚本编写Nagios插件监控程序资源占用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Shell脚本编写Nagios插件监控程序资源占用

一般情况下,我们只需要监控程序进程在没在就可以了。但是这次遭遇了这样的事,公司开发的程序,程序进程还在,但是死锁了。导致大范围的影响,更要命的是根本不知道问题出在哪里,还是别的测试部同事帮忙发现的,真是丢尽运维的脸了… 为避免下次再遭遇到这
2022-06-04

如何编写Shell脚本使Nagios插件监控程序资源占用

本篇内容主要讲解“如何编写Shell脚本使Nagios插件监控程序资源占用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写Shell脚本使Nagios插件监控程序资源占用”吧!一、shel
2023-06-09

如何编写自动杀掉占用较多CPU资源的Shell脚本

本篇内容主要讲解“如何编写自动杀掉占用较多CPU资源的Shell脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写自动杀掉占用较多CPU资源的Shell脚本”吧!代码如下:#!/bin/
2023-06-09

编程热搜

目录