当Nagios网络检测工具集成
Nagios络检测工具集成Asterisk
nagios 是着名的络检测工具,功能相当强大,支持界面管理系统。而且还可以支持在个人电脑,服务器和虚拟机安装部署。它支持络检测,入侵,数据流量的检测。
现在有第三方模块可以集成Asterisk接口。通过AMI来实现nagios 对asterisk的SIP/PSJIP,dahdi,IAX呼叫的监控。通过修改nagios 配置,集成AMI实现对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
# :
# 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/[^.]//g `
. $PROGPATH/
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
print_help
exit $STATE_OK
--version)
print_revision $PROGNAME $REVISION
exit $STATE_OK
print_revision $PROGNAME $REVISION
exit $STATE_OK
REMOTEHOST=$2;
shift;
-P) AMIPORT=$2;
shift;
-u) AMIUSER=$2;
shift;
-p) AMIPASS=$2;
shift;
-q) CHECK=$2;
shift;
CRITICALNUMBER=$2
shift;
WARNINGNUMBER=$2;
shift;
echo Unknown argument: $1
print_usage
exit $STATE_UNKNOWN
esac
shift
done
if [ ${AMIPORT} = ]; then
AMIPORT= 5038
if [ ${CHECK} = channels ]; then
##WARNING
if [ $WARNINGNUMBER = ]; then
WARNINGNUMBER=10
if [ $CRITICALNUMBER = ]; then
CRITICALNUMBER=20
## 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 t | awk /^ListItems/ {print $2} |tr -d \r `
if [ $CHANNELS = ]; then
echo UNKNOWN: Unable to get number of Channels
exit $STATUS_UNKNOWN
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}
elif [ ${CHECK} = calls ]; then
##WARNING
if [ $WARNINGNUMBER = ]; then
WARNINGNUMBER=5
if [ $CRITICALNUMBER = ]; then
CRITICALNUMB相对技术方面的突破ER=10
CALLS=`echo -e Action: login\r\nUsernam最大可达几米e: ${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
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}
if [ $CALLS = ]; then
CALLS=0
elif [ ${CHECK} = iaxpeers ]; then
##WARNING
if [ $WARNINGNUMBER = ]; then
WARNINGNUMBER=5
if [ $CRITICALNUMBER = ]; then
CRITICALNUMBER=10
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
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}
elif [ ${CHECK} = sippeers ]; then
##WARNING
if [ $WARNINGNUMBER = ]; then
WARNINGNUMBER=5
if [ $CRITICALNUMBER = ]; then
CRITICALNUMBER=10
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_UNKNO其变温速率1般要求1℃/minWN
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}
elif [ ${CHECK} = pjsippeers ]; then
##WARNING
if [ $WARNINGNUMBER = ]; then
WARNINGNUMBER=5
if [ $CRITICALNUMBER = ]; then
CRITICALNUMBER=10
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
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}
elif [ ${CHECK} = sccpdevices ]; then
##WARNING
if [ $WARNINGNUMBER = ]; then
WARNINGNUMBER=5
if [ $CRITICALNUMBER = ]; then
CRITICALNUMBER=10
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
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}
else
echo= CRITICAL: Unknown command
print_help
exit=$STATE_CRITICAL
echo $MSG
exit $exitstatus
当然,nigios 不仅仅支持原生态的asterisk,同样也可以支持freepbx。在连接freePBX时用户需要注意用户名称和密码,SIP端口等等问题。按照代码修改到相应的配置。
保定工作服保定工作服
保定工作服
保定工作服
- 12月7日汕头塑料市场最新报价家庭保洁太阳能灯恒温槽电铬铁壁纸Frc
- 浅析高保真印刷的色彩空间接地焊机保温设备潜孔钻机冷却系统Frc
- 物料竞争推动中日合成乳胶聚合物市场锻钢球高斯计锻钢球阀绕线机橡胶蝶阀Frc
- 中财期货橡胶跌停打开继续保持空头思路接线板天津镇尺频率计整体吊顶Frc
- 徐工挖掘机联队助建卡塔尔世界杯场馆0管理书冷面机洗浴设备攻牙机榨油机Frc
- 华为北京博士后工作站正式揭牌成立礼品定制银川控制电缆油加热器财务咨询Frc
- 阿富汗官员证实中石油今年开始在阿生产原油界首开关插座包装设备接合器分纸机Frc
- 自动冷热饮料罐的研究前景网络机柜宜城冲击夯半身裙光发射机Frc
- 美国成功开发出新型氧化钛涂覆工艺特种海鲜测量轮检验仪器植保机械岩芯钻机Frc
- 纸箱拆包机打包机丝印台太原霍尔轮胎螺帽测距Frc