檢查指定進(jìn)程內(nèi)存使用情況的nagios腳本

由于近來(lái)線上環(huán)境的某些進(jìn)程總是內(nèi)存溢出,所以需要添加一下對(duì)于某些進(jìn)程的內(nèi)存使用情況監(jiān)控,搜到的別人的腳本大都不太滿意,于是自己寫了個(gè),代碼如下:

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比鹽邊網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式鹽邊網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鹽邊地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。

#!/bin/bash
HELP(){
    echo " Usage: $0 -p /var/run/pidfile -w used% -c used%"
    echo " Exam: $0 -p /var/run/pidfile -w 85 -c 90"
    exit 3
}
OK=0 ; WA=1 ; CR=2 ;UN=3 ; WAR=$4 ; CRI=$6 ; MI=${7:-0.9} ; MX=${8:-0.8}
#MX:性能數(shù)據(jù)的CRITICAL線,計(jì)算方式為內(nèi)存總量乘以MX值,此處為0.9等于 當(dāng)前系統(tǒng)總內(nèi)存 * 0.9,取結(jié)果整數(shù)部分
#MI:性能數(shù)據(jù)的WARNING線,計(jì)算方式為內(nèi)存總量乘以MX值,此處為0.8等于 當(dāng)前系統(tǒng)總內(nèi)存 * 0.8,取結(jié)果整數(shù)部分
DATE="date +%Y-%m-%d~%k:%M:%S" ; NUL=/dev/null
TAG=$1 ; [ "$TAG" != "-p" ] && HELP
PID=$2
[ ! -f "$PID" ] && echo "`$DATE` Error: $PID not exist." && HELP
if ! ps aux|grep "\<`cat $PID`\>"|grep -v grep &>$NUL;then
    echo "`$DATE` Error: `cat $PID` not exist."
    HELP
else
    TOTAL=`/usr/bin/free -m|grep Mem|awk '{print $2}'`
    MIN=`echo "$TOTAL * $MI"|/usr/bin/bc|awk -F. '{print $1}'`
    MAX=`echo "$TOTAL * $MX"|/usr/bin/bc|awk -F. '{print $1}'`
    OSM=`/usr/bin/free -m|grep "\<cache\>"|awk '{print $NF}'`
    ID=`cat $PID`
    BMEM=`/usr/bin/top -bn 1|grep "\<$ID\>"|awk '{print $10}'`
    declare -u MMEM=`/usr/bin/top -bn 1|grep "\<$ID\>"|awk '{print $6}'`
    RES=`echo "$BMEM > $CRI"|/usr/bin/bc`
    if [ "$RES" -eq 1 ];then
        echo "CRITICAL - PID:$ID Memory usage = $BMEM% ["$MMEM"B]. OS free memory="$OSM"MB|Used="$MMEM"B;"$MIN"MB;"$MAX"MB;0;"$TOTAL"MB"
        exit $CR
    fi
    RES=`echo "$BMEM > $WAR"|/usr/bin/bc`
    if [ "$RES" -eq 1 ];then
        echo "WARNING - PID:$ID Memory usage = $BMEM% ["$MMEM"B]. OS free memory="$OSM"MB|Used="$MMEM"B;"$MIN"MB;"$MAX"MB;0;10877MB"
        exit $WA
    else
        echo "OK - PID:$ID Memory usage = $BMEM% ["$MMEM"B]. OS free memory="$OSM"MB|Used="$MMEM"B;"$MIN"MB;"$MAX"MB;0;10877MB"
        exit $OK
    fi
fi
HELP
##########
##########
##能不能吐槽一下這個(gè)代碼編輯器???
##########
##########

測(cè)試使用如下:

./check_mem_pid.sh -p /var/run/hadoop/hdfs/hadoop-hdfs-namenode.pid -w 80 -c 90
OK - PID:5534 Memory usage = 6.6% [720MB]. OS free memory=9179MB|Used=720MB;9789MB;8701MB;0;10877MB

# -w 指內(nèi)存使用的warning比例,-c為critical,其大小均為top -bn 1取出的指定pid的第10列字段

不足之處,歡迎指正...

昨天同事又提了點(diǎn)要求,說(shuō)能不能給這個(gè)進(jìn)程指定可以內(nèi)存的大小,在可用的范圍內(nèi)監(jiān)控,所以,今天又修改了下,在nagios服務(wù)端執(zhí)行,結(jié)果如下:

# /usr/lib64/nagios/plugins/check_nrpe -H node63 -c check_test -a /var/run/hadoop/hdfs/hadoop-hdfs-namenode.pid 80 90 2048
OK - 719.59MB / 2048MB. (35.14% used)|Used=35.14%;1843MB;1638MB;0;2048MB
# 第一個(gè)參數(shù)是進(jìn)程pid文件,第二個(gè)是warning報(bào)警值,第二個(gè)critical報(bào)警值(85就是已用85就開始報(bào)警),最后一個(gè)給監(jiān)聽的目標(biāo)進(jìn)程共分配多少內(nèi)存,單位MB。

在本地執(zhí)行則直接使用腳本如下:

# ./check_mem_pid.sh -p /var/run/hadoop/hdfs/hadoop-hdfs-namenode.pid -w 30 -c 40 -t 2048
WARNING - 719.53MB / 2048MB. (35.13% used)|Used=35.13%;1843MB;1638MB;0;2048MB

代碼就不再列出了,直接上傳到附件了(帶有nagios相關(guān)使用配置文檔哦,親),有興趣的同學(xué)自行下載哈。

附件:http://down.51cto.com/data/2363564

新聞標(biāo)題:檢查指定進(jìn)程內(nèi)存使用情況的nagios腳本
本文路徑:http://muchs.cn/article28/ihcsjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站營(yíng)銷做網(wǎng)站、網(wǎng)站收錄網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)