最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本編寫Nagios插件監(jiān)控程序資源占用

 更新時(shí)間:2014年12月22日 09:57:04   投稿:junjie  
這篇文章主要介紹了Shell腳本編寫Nagios插件監(jiān)控程序資源占用,本文先是給出了需求和需求分析,然后給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

一般情況下,我們只需要監(jiān)控程序進(jìn)程在沒在就可以了。但是這次遭遇了這樣的事,公司開發(fā)的程序,程序進(jìn)程還在,但是死鎖了。導(dǎo)致大范圍的影響,更要命的是根本不知道問題出在哪里,還是別的測試部同事幫忙發(fā)現(xiàn)的,真是丟盡運(yùn)維的臉了…
為避免下次再遭遇到這樣的情況,分析了這次進(jìn)程死鎖的現(xiàn)象,發(fā)現(xiàn)死鎖會(huì)占用100%的cpu,正常情況下只占用10%以內(nèi)。決定編寫nagios插件,用來監(jiān)控程序占用的資源,包括cpu,內(nèi)存等。

一、shell腳本需求分析:

   能設(shè)置cpu,mem的閾值,資源占用超過閾值就報(bào)警。
   要能判斷這個(gè)進(jìn)程是否存在,若有一個(gè)不存在,則報(bào)警。

二、shell腳本執(zhí)行效果如下:

1、如果輸入格式不正確,則輸出幫助信息

復(fù)制代碼 代碼如下:

[root@center230 libexec]# shcomponent_resource.sh
Usage parament:
   component_resource.sh [--cpu] [--mem]
 
Example:
   component_resource.sh --cpu 50 --mem 50

2、若沒超出閾值,輸出資源占用情況,退出值為0

復(fù)制代碼 代碼如下:

[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

復(fù)制代碼 代碼如下:

[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、若進(jìn)程不存在,輸出down掉的進(jìn)程,以及正常使用中的進(jìn)程資源情況,退出值為2

復(fù)制代碼 代碼如下:

[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腳本代碼如下:

復(fù)制代碼 代碼如下:

[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
 
 
 
###判斷傳參數(shù)量,如果不為4,則var值為1,var0則正常####
if [[ $1 == $3  ]];then
       var=1  
elif [ $# -ne 4 ] ;then
       var=1
else
       var=0
fi
 
 
###打印錯(cuò)誤提示信息
if [ $var -eq 1 ];then
   echo "Usage parament:"
   echo "    $0 [--cpu][--mem]"
   echo ""
   echo "Example:"
   echo "    $0 --cpu 50 --mem50"
   exit
fi
 
 
###把不存在的進(jìn)程放一變量中
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[@]}"
 
 
 
####對比進(jìn)程所占資源與閾值大小
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
 
 
###如果該變量有值,則代表有進(jìn)程down。則退出值為2
if [[ "$NotExist" != ""]];then
 echo -e "Current ${NotExist} isdown.$cpu_use_all;$mem_use_all"
 exit 2
###如果cpu比較值為1,則代表有進(jìn)程占用超過閾值,則退出值為2
elif [[ "$compare_cpu_temp" == 1]];then
   echo -e "$cpu_use_all;$mem_use_all"
   exit 2
 
##如果mem比較值為1,則代表為進(jìn)程mem占用超過閾值,則退出值為2
elif [[ $compare_mem_temp == 1 ]];then
   echo -e "$cpu_use_all;$mem_use_all"
   exit 2
##否則則正常輸出,并輸出所占cpu與內(nèi)存比例
else
   echo -e "$cpu_use_all;$mem_use_all"
   exit 0
fi

四、后話:

  隨著近日編寫shell腳本越來越多,有時(shí)難免會(huì)回改以前所寫腳本,經(jīng)常要看一段時(shí)間才能看懂。
  為方便后續(xù)的維護(hù),在腳本當(dāng)中,每一個(gè)函數(shù),每一段功能,都做備注,方便以后自己或他人來進(jìn)行維護(hù)。

相關(guān)文章

  • Shell腳本中if條件判斷的寫法實(shí)例

    Shell腳本中if條件判斷的寫法實(shí)例

    在寫shell腳本的過程中,用到了if else的寫法,突然有多個(gè)參數(shù)需要判斷,那么就想到了if else if的用法,這篇文章主要給大家介紹了關(guān)于Shell腳本中if條件判斷寫法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • linux定時(shí)備份mysql并同步到其它服務(wù)器

    linux定時(shí)備份mysql并同步到其它服務(wù)器

    這篇文章主要介紹了linux定時(shí)備份mysql并同步到其它服務(wù)器,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Impala-shell命令參數(shù)的實(shí)現(xiàn)

    Impala-shell命令參數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了Impala-shell命令參數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • shell腳本配合zabbix實(shí)現(xiàn)tomcat的故障自愈功能

    shell腳本配合zabbix實(shí)現(xiàn)tomcat的故障自愈功能

    這篇文章主要介紹了shell腳本配合zabbix實(shí)現(xiàn)tomcat的故障自愈,服務(wù)實(shí)現(xiàn)自愈的方式有通過shell腳本+定時(shí)任務(wù)的方式,藍(lán)鯨Pass故障自愈平臺(tái),shell腳本+zabbix觸發(fā)器動(dòng)作,本文給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-03-03
  • 設(shè)置Linux系統(tǒng)的空閑等待時(shí)間TMOUT的方法

    設(shè)置Linux系統(tǒng)的空閑等待時(shí)間TMOUT的方法

    下面小編就為大家?guī)硪黄O(shè)置Linux系統(tǒng)的空閑等待時(shí)間TMOUT的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 解析Linux?xfs文件系統(tǒng)stat命令Birth字段為空的原因

    解析Linux?xfs文件系統(tǒng)stat命令Birth字段為空的原因

    這篇文章主要介紹了Linux?xfs文件系統(tǒng)stat命令Birth字段為空的原因探究,stat命令在一些平臺(tái)下Birth字段有值,而在一些平臺(tái)則為空值,這是什么原因呢,下面小編給大家詳細(xì)講解,需要的朋友可以參考下
    2023-05-05
  • Linux 中的 Install命令

    Linux 中的 Install命令

    install命令的作用是安裝或升級軟件或備份數(shù)據(jù),它的使用權(quán)限是所有用戶。 本文重點(diǎn)給大家介紹Linux 中的 Install命令,感興趣的朋友一起看看吧
    2017-09-09
  • Linux基礎(chǔ)命令last 命令實(shí)例詳解

    Linux基礎(chǔ)命令last 命令實(shí)例詳解

    Linux last命令用于顯示系統(tǒng)開機(jī)以來獲是從每月初登入者的訊息。本文主要給大家介紹Linux基礎(chǔ)命令last 命令實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • shell命令行參數(shù)用法簡介

    shell命令行參數(shù)用法簡介

    本文介紹了shell命令行參數(shù)的用法,對于普通腳本語言諸如perl python等,寫一個(gè)腳本程序,包裝命令行參數(shù)時(shí),一般都是用getopt之類的;c語言也類似
    2014-04-04
  • 一個(gè)下載網(wǎng)頁圖片的shell腳本

    一個(gè)下載網(wǎng)頁圖片的shell腳本

    這篇文章主要介紹了一個(gè)下載網(wǎng)頁圖片的shell腳本,需要的朋友可以參考下
    2014-03-03

最新評論

股票| 汉中市| 昌平区| 东阿县| 稷山县| 图木舒克市| 鄂托克前旗| 海原县| 黄山市| 东乌珠穆沁旗| 天等县| 开化县| 孟村| 福建省| 中江县| 额尔古纳市| 图木舒克市| 报价| 读书| 永昌县| 青河县| 叶城县| 漾濞| 鄯善县| 湟源县| 成武县| 美姑县| 陇南市| 黑水县| 太康县| 宜兴市| 顺平县| 绥江县| 洛宁县| 卢龙县| 中方县| 泊头市| 衡南县| 读书| 阳城县| 长葛市|