• <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