天天看點

Nagios監控mfs運作狀态插件腳本

      公司架設MFS分布式存儲檔案系統有一段的時間了,和鄭輝(QQ名稱靈犀)也是一起研究和測試MFS,仔細研究各個參數、測試不同情況的災備、測試mfs遇到故障的恢複方法,更是在中間得出一些結論并反複驗證,耗時兩個月MFS終于上線。目前檔案體系存儲了150多W的資料,上線兩個多月運作比較穩定。

     但是之前決定的後期編寫報警腳本的問題也是因為其他問題一拖再拖,到這時才草草寫了一個腳本實作基本功能,分享出來,希望大家一起進步!

#!/bin/bash

# ===========================================================================================================

#

# MFS status check plugins for nagios

#

# Written by    : liu yunfeng

# Release       : 1.0

# Create Date   : 2010-05-18

# Description   : Nagios plugins (script) to check MFS status

#

# ===========================================================================================================

# Nagios return codes

STATE_OK=0

STATE_WARNING=1

STATE_CRITICAL=2

STATE_UNKNOWN=3

#Get Master server Process

Master(){

MFS_PID=`ps -ef | grep mfsmaster | grep ${mfspath} | awk '{print $2}'`

if [ "${MFS_PID}" = "" ];then

        echo "ERROR : mfs master does not start"

        exit $STATE_CRITICAL

else

 echo "OK : mfs master server running OK!"

 exit $STATE_OK

fi

}

#Get chunker server Process

Chunker(){

MFS_PID=`ps -ef | grep mfschunkserver | grep ${mfspath} | awk '{print $2}'`

if [ "${MFS_PID}" = "" ];then

        echo "ERROR : mfs chunkserver does not start"

        exit $STATE_CRITICAL

else

 echo "OK : mfs master chunkserver running OK!"

        exit $STATE_OK

fi

}

Disk_used(){

Disk_used=`df -h | grep ${mountpoint} |awk '{print $4}'`

if [ ${Disk_used%/%} -ge ${warningdiskused} -a ${Disk_used%/%} -lt ${criticaldiskused}  ];then

 echo "Waring :mfs disk used Rate is "${Disk_used}""

 exit $STATE_WARNING

elif [ ${Disk_used%/%} -ge ${criticaldiskused} ];then

 echo "CRITICAL :mfs disk used Rate is "${Disk_used}""

 exit $STATE_CRITICAL

elif [ "${Disk_used%/%}" = "" ];then

 echo "CRITICAL :mfs client not mount on"

 exit $STATE_CRITICAL

else

 echo "OK : MFS client mount on and disk used rate is "${Disk_used}" , Everything is OK!"

 exit $STATE_OK

fi

}

#Get metalogger server Process

Metalogger(){

MFS_PID=`ps -ef | grep mfsmetalogger | grep ${mfspath} | awk '{print $2}'`

if [ "${MFS_PID}" = "" ];then

        echo "ERROR : mfs mfsmetalogger does not start"

        exit $STATE_CRITICAL

else

        echo "OK : mfs master mfsmetalogger running OK!"

        exit $STATE_OK

fi

}

# Functions plugin usage

print_usage()

{

        echo ""

        echo " -M MFS master server  status "

 echo " -C MFS chunker server status "

 echo " -U MFS client disk used Rate "

 echo " -L MFS metalogger server status "

 echo " -h  Show this page "

        echo ""

        echo " Usage1 : check_mfs.sh -M mfsmasterpath"

 echo "    ex : check_mfs.sh -M /usr/local/mfs"

 echo " Usage2 : check_mfs.sh -C mfschunkpath"

 echo "    ex : check_mfs.sh -C /usr/local/mfs"

 echo " Usage3 : check_mfs.sh -U mountpoint warningrate criticalrate"

 echo "    ex : check_mfs.sh -U /mnt/mfs 60 80"

 echo " Usage4 : check_mfs.sh -L mfsmetaloggerpath"

 echo "    ex : check_mfs.sh -L /usr/local/mfs"

        echo "     ex : check_mfs.sh -h"

        echo ""

        exit 0

}

# Parse parameter

while [ $# -gt 0 ]

do

        case "$1" in

                -h | --help)

                        print_usage

                        exit $STATE_OK

                        ;;

  -M | --master)

   mfspath=${2:-"/usr/local/mfs"}

   Master

    ;;

  -C | --chunker)

   mfspath=${2:-"/usr/local/mfs"}

   Chunker

   ;;

  -U | --usedwarning)

   mountpoint=${2:-"/mnt/mfs"}

   warningdiskused=${3:-"75"}

   criticaldiskused=${4:-"85"}

   Disk_used

                        ;;

  -L | --metalogger)

   mfspath=${2:-"/usr/local/mfs"}

                        Metalogger

   ;;

                *)      echo "Unknown argement: $1"

                        exit $STATE_UNKNOWN

                        ;;

        esac

shift

done