• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 新聞 > 國際 >
     首頁(yè) > 新聞 > 國際 >

    Nagios網(wǎng)絡(luò )檢測工具集成Asterisk

    2016-10-24 13:41:38   作者:james.zhu   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      nagios 是著(zhù)名的網(wǎng)絡(luò )檢測工具,功能相當強大,支持界面管理系統。而且還可以支持在個(gè)人電腦,服務(wù)器和虛擬機安裝部署。它支持網(wǎng)絡(luò )檢測,入侵,數據流量的檢測。
    \
      現在有第三方模塊可以集成Asterisk接口。通過(guò)AMI來(lái)實(shí)現nagios 對asterisk的SIP/PSJIP,dahdi,IAX呼叫的監控。通過(guò)修改nagios 配置,集成AMI實(shí)現對asterisk通道檢測。
      #!/bin/bash
      #
      #    Program : check_asterisk_ami
      #            :
      #     Author : Jason Rivers
      #            : Dave Burgess
      #            :
      #    Purpose : Nagios plugin to return Information from an Asterisk host
      #using AMI
      #            :
      # Parameters : --help
      #            : --version
      #            :
      #    Returns : Standard Nagios status_* codes as defined in utils.sh
      #            :
      #    Licence : GPL
      #
      #      Notes : See --help for details
      #============:==============================================================
      PROGNAME=`basename $0`
      PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
      REVISION=`echo '$Revision: 1.2.0.2 $' | sed -e 's/[^0-9.]//g'`
      . $PROGPATH/utils.sh
      print_usage() {
      echo "Usage: $PROGNAME [-H hostname] [-q query] [-u username] [-p password] [-P port] [-w warning] [-c critical]"
      echo "-HHostname"
      echo "-qCommand to query"
      echo "-uAMI Username"
      echo "-pAMI Password"
      echo "-P(optional) AMI PORT"
      echo "-w(optional) warning threshold"
      echo "-c(optional) critical threshold"
      echo ""
      echo "SupportedCommands:"
      echo "channels(check number of current channels in-use)"
      echo "calls(check number of current calls)"
      echo "pjsippeers(check number of current calls)"
      echo "sippeers(check number of current calls)"
      echo "sccppeers(check number of current calls)"
      echo "iaxpeers(check number of current calls)"
      echo ""
      echo "Usage: $PROGNAME --help"
      echo "Usage: $PROGNAME --version"
      }
      print_help() {
      print_revision $PROGNAME $REVISION
      echo ""
      echo "Nagios Plugin to check Asterisk using AMI"
      echo ""
      print_usage
      echo ""
      echo "Asterisk Call Status Check.  Jason Rivers 2011"
      echo ""
      exit 0
      #        support
      }
      # If we have arguments, process them.
      #
      exitstatus=$STATE_WARNING #default
      while test -n "$1"; do
      case "$1" in
      --help)
      print_help
      exit $STATE_OK
      ;;
      -h)
      print_help
      exit $STATE_OK
      ;;
      --version)
      print_revision $PROGNAME $REVISION
      exit $STATE_OK
      ;;
      -V)
      print_revision $PROGNAME $REVISION
      exit $STATE_OK
      ;;
      -H)
      REMOTEHOST=$2;
      shift;
      ;;
      -P) AMIPORT=$2;
      shift;
      ;;
      -u) AMIUSER=$2;
      shift;
      ;;
      -p) AMIPASS=$2;
      shift;
      ;;
      -q) CHECK=$2;
      shift;
      ;;
      -c)
      CRITICALNUMBER=$2
      shift;
      ;;
      -w)
      WARNINGNUMBER=$2;
      shift;
      ;;
      *)
      echo "Unknown argument: $1"
      print_usage
      exit $STATE_UNKNOWN
      ;;
      esac
      shift
      done
      if [ "${AMIPORT}" = "" ]; then
      AMIPORT="5038"
      fi
      if [ "${CHECK}" = "channels" ]; then
      ##WARNING
      if [ "$WARNINGNUMBER" = "" ]; then
      WARNINGNUMBER=10
      fi
      if [ "$CRITICALNUMBER" = "" ]; then
      CRITICALNUMBER=20
      fi
      ## Checking active chanels on Asterisk
      CHANNELS=`echo -e "Action: login\r\nUsername: ${AMIUSER}\r\nSecret: ${AMIPASS}\r\nEvents: off\r\n\r\nAction: CoreShowChannels\r\n\r\nAction: Logoff\r\n\r\n" | netcat $REMOTEHOST ${AMIPORT} | tee testout.txt | awk '/^ListItems/ {print $2}'|tr -d "\r"`
      if [ "$CHANNELS" = "" ]; then
      echo "UNKNOWN: Unable to get number of Channels"
      exit $STATUS_UNKNOWN
      fi
      if [ $CHANNELS -lt $WARNINGNUMBER ]; then
      exitstatus=$STATU_OK
      MSG="OK: ${CHANNELS} Asterisk calls active|channels=${CHANNELS}"
      elif [ $CHANNELS -lt $CRITICALNUMBER ]; then
      exitstatus=$STATU_WARNING
      MSG="WARNING: ${CHANNELS} Asterisk calls active|channels=${CHANNELS}"
      elif [ $CHANNELS -ge $CRITICALNUMBER ]; then
      exitstatus=$STATU_CRITICAL
      MSG="CRITICAL: ${CHANNELS} Asterisk calls active|channels=${CHANNELS}"
      fi
      elif [ "${CHECK}" = "calls" ]; then
      ##WARNING
      if [ "$WARNINGNUMBER" = "" ]; then
      WARNINGNUMBER=5
      fi
      if [ "$CRITICALNUMBER" = "" ]; then
      CRITICALNUMBER=10
      fi
      CALLS=`echo -e "Action: login\r\nUsername: ${AMIUSER}\r\nSecret: ${AMIPASS}\r\nEvents: off\r\n\r\nAction: Command\r\ncommand: Core Show Channels\r\n\r\nAction: Logoff\r\n\r\n" | netcat ${REMOTEHOST} ${AMIPORT} | awk '/active call/ {print $1}' | tr -d "\r"`
      if [ "$CALLS" = "" ]; then
      echo "UNKNOWN: Unable to get number of calls"
      exit $STATUS_UNKNOWN
      fi
      if [ $CALLS -lt $WARNINGNUMBER ]; then
      exitstatus=$STATE_OK
      MSG="OK: ${CALLS} Asterisk calls active|calls=${CALLS}"
      elif [ $CALLS -lt $CRITICALNUMBER ]; then
      exitstatus=$STATE_WARNING
      MSG="WARNING: ${CALLS} Asterisk calls active|calls=${CALLS}"
      elif [ $CALLS -ge $CRITICALNUMBER ]; then
      exitstatus=$STATE_CRITICAL
      MSG="CRITICAL: ${CALLS} Asterisk calls active|calls=${CALLS}"
      fi
      if [ "$CALLS" = "" ]; then
      CALLS=0
      fi
      elif [ "${CHECK}" = "iaxpeers" ]; then
      ##WARNING
      if [ "$WARNINGNUMBER" = "" ]; then
      WARNINGNUMBER=5
      fi
      if [ "$CRITICALNUMBER" = "" ]; then
      CRITICALNUMBER=10
      fi
      IAXpeers=`echo -e "Action: login\r\nUsername: ${AMIUSER}\r\nSecret: ${AMIPASS}\r\nEvents: off\r\n\r\nAction: Command\r\ncommand: iax2 show peers\r\n\r\nAction: Logoff\r\n\r\n" | netcat ${REMOTEHOST} ${AMIPORT} | awk '/online/ {print $0}' | tr -d "\r"`
      ONLINE=`echo $IAXpeers | sed 's/.*\[\(.*\) online.*unmonitored.*/\1/'`
      OFFLINE=`echo $IAXpeers | sed 's/.*online, \(.*\) offline.*unmonitored.*/\1/'`
      if [ "$OFFLINE" = "" ]; then
      echo "UNKNOWN: Unable to get number of IAX Peers"
      exit $STATUS_UNKNOWN
      fi
      if [ $OFFLINE -lt $WARNINGNUMBER ]; then
      exitstatus=$STATE_OK
      MSG="OK: ${ONLINE} online, ${OFFLINE} offline IAX2 peers|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -lt $CRITICALNUMBER ]; then
      exitstatus=$STATE_WARNING
      MSG="WARNING: ${ONLINE} online, ${OFFLINE} offline IAX2 peers|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -ge $CRITICALNUMBER ]; then
      exitstatus=$STATE_CRITICAL
      MSG="CRITICAL: ${ONLINE} online, ${OFFLINE} offline IAX2 peers|online=${ONLINE} offline=${OFFLINE}"
      fi
      elif [ "${CHECK}" = "sippeers" ]; then
      ##WARNING
      if [ "$WARNINGNUMBER" = "" ]; then
      WARNINGNUMBER=5
      fi
      if [ "$CRITICALNUMBER" = "" ]; then
      CRITICALNUMBER=10
      fi
      SIPpeers=`echo -e "Action: login\r\nUsername: ${AMIUSER}\r\nSecret: ${AMIPASS}\r\nEvents: off\r\n\r\nAction: Command\r\ncommand: sip show peers\r\n\r\nAction: Logoff\r\n\r\n" | netcat ${REMOTEHOST} ${AMIPORT} | awk '/online/ {print $0}' | tr -d "\r"`
      ONLINE=`echo $SIPpeers | sed 's/.*Monitored: \(.*\) online.*Unmonitored.*/\1/'`
      OFFLINE=`echo $SIPpeers | sed 's/.*online, \(.*\) offline.*Unmonitored.*/\1/'`
      if [ "$OFFLINE" = "" ]; then
      echo "UNKNOWN: Unable to get number of SIP Peers"
      exit $STATUS_UNKNOWN
      fi
      if [ $OFFLINE -lt $WARNINGNUMBER ]; then
      exitstatus=$STATE_OK
      MSG="OK: ${ONLINE} online, ${OFFLINE} offline SIP peers|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -lt $CRITICALNUMBER ]; then
      exitstatus=$STATE_WARNING
      MSG="WARNING: ${ONLINE} online, ${OFFLINE} offline SIP peers|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -ge $CRITICALNUMBER ]; then
      exitstatus=$STATE_CRITICAL
      MSG="CRITICAL: ${ONLINE} online, ${OFFLINE} offline SIP peers|online=${ONLINE} offline=${OFFLINE}"
      fi
      elif [ "${CHECK}" = "pjsippeers" ]; then
      ##WARNING
      if [ "$WARNINGNUMBER" = "" ]; then
      WARNINGNUMBER=5
      fi
      if [ "$CRITICALNUMBER" = "" ]; then
      CRITICALNUMBER=10
      fi
      echo -e "Action: login\r\nUsername: ${AMIUSER}\r\nSecret: ${AMIPASS}\r\nEvents: off\r\n\r\nAction: Command\r\ncommand: pjsip show endpoints\r\n\r\nAction: Logoff\r\n\r\n" | netcat ${REMOTEHOST} ${AMIPORT}  | grep " Endpoint:"  | tail -n +2 > /tmp/hold
      cat /tmp/hold
      LINES=`cat /tmp/hold | wc -l`
      UP=`cat /tmp/hold | grep ' In use ' | wc -l`
      ONLINE=`cat /tmp/hold | grep 'Not in use' | wc -l`
      ONLINE=`expr $ONLINE + $UP`
      OFFLINE=`cat /tmp/hold | grep Unavailable | wc -l`
      rm -f /tmp/hold
      #echo $LINES
      #echo $ONLINE
      #echo $OFFLINE
      if [ "$OFFLINE" = "" ]; then
      echo "UNKNOWN: Unable to get number of PJ-SIP Endpoints"
      exit $STATUS_UNKNOWN
      fi
      if [ $OFFLINE -lt $WARNINGNUMBER ]; then
      exitstatus=$STATE_OK
      MSG="OK: ${ONLINE} online, ${OFFLINE} offline PJ-SIP endpoints|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -lt $CRITICALNUMBER ]; then
      exitstatus=$STATE_WARNING
      MSG="WARNING: ${ONLINE} online, ${OFFLINE} offline PJ-SIP endpoints|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -ge $CRITICALNUMBER ]; then
      exitstatus=$STATE_CRITICAL
      MSG="CRITICAL: ${ONLINE} online, ${OFFLINE} offline PJ-SIP endpoints|online=${ONLINE} offline=${OFFLINE}"
      fi
      elif [ "${CHECK}" = "sccpdevices" ]; then
      ##WARNING
      if [ "$WARNINGNUMBER" = "" ]; then
      WARNINGNUMBER=5
      fi
      if [ "$CRITICALNUMBER" = "" ]; then
      CRITICALNUMBER=10
      fi
      SCCPdevices=`echo -e "Action: login\r\nUsername: ${AMIUSER}\r\nSecret: ${AMIPASS}\r\nEvents: off\r\n\r\nAction: Command\r\ncommand: sccp show devices\r\n\r\nAction: Logoff\r\n\r\n" | netcat ${REMOTEHOST} ${AMIPORT} | awk '/online/ {print $0}' | tr -d "\r"`
      ONLINE=`echo $SCCPdevices | sed 's/.*Monitored: \(.*\) online.*Unmonitored.*/\1/'`
      OFFLINE=`echo $SCCPdevices | sed 's/.*online, \(.*\) offline.*Unmonitored.*/\1/'`
      if [ "$OFFLINE" = "" ]; then
      echo "UNKNOWN: Unable to get number of SCCP Peers"
      exit $STATUS_UNKNOWN
      fi
      if [ $OFFLINE -lt $WARNINGNUMBER ]; then
      exitstatus=$STATE_OK
      MSG="OK: ${ONLINE} online, ${OFFLINE} offline SCCP devices|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -lt $CRITICALNUMBER ]; then
      exitstatus=$STATE_WARNING
      MSG="WARNING: ${ONLINE} online, ${OFFLINE} offline SIP devices|online=${ONLINE} offline=${OFFLINE}"
      elif [ $OFFLINE -ge $CRITICALNUMBER ]; then
      exitstatus=$STATE_CRITICAL
      MSG="CRITICAL: ${ONLINE} online, ${OFFLINE} offline SIP devices|online=${ONLINE} offline=${OFFLINE}"
      fi
      else
      echo="CRITICAL: Unknown command"
      print_help
      exit=$STATE_CRITICAL
      fi
      echo $MSG
      exit $exitstatus
      當然,nigios 不僅僅支持原生態(tài)的asterisk,同樣也可以支持freepbx。在連接freePBX時(shí)用戶(hù)需要注意用戶(hù)名稱(chēng)和密碼,SIP端口等等問(wèn)題。按照代碼修改到相應的配置。

    相關(guān)閱讀:

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 邢台县| 东乌珠穆沁旗| 泰兴市| 榆林市| 鹰潭市| 楚雄市| 桦南县| 建昌县| 莒南县| 化州市| 宝兴县| 洛川县| 克什克腾旗| 班戈县| 乌鲁木齐县| 朝阳区| 且末县| 息烽县| 修水县| 武义县| 甘南县| 班玛县| 鄢陵县| 平陆县| 盖州市| 华容县| 育儿| 汝州市| 延边| 德惠市| 邛崃市| 凌云县| 清水河县| 沧州市| 理塘县| 榆树市| 花莲县| 庆城县| 城步| 紫阳县| 保山市| http://444 http://444 http://444 http://444 http://444 http://444