侧边栏壁纸
博主头像
爱运维 博主等级

行动起来,活在当下

  • 累计撰写 197 篇文章
  • 累计创建 143 个标签
  • 累计收到 21 条评论

目 录CONTENT

文章目录

公司用elastix系统检测挂不断电话进行报警脚本(在用)

Administrator
2017-02-14 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

前提提要:elastix系统是公司常用的一个sip管理系统,底层是linux,我们公司在使用过程中有时候出现打电话挂不断的情况,正常是我们合上电话就挂断,异常是合上电话在电话屏幕显示已经挂断,但是系统还是在线。

影响:第一如果是国际或者国内都可能造成不必要的金钱损失;第二在挂不断的时候,用户没办法外拨和接听,影响业务。

以前我们都是每天早上9点上班第一件事情就是去sip界面查看。后来我嫌麻烦,就写了个脚本,实时监测拨打电话大于1H就报警( 一般人打不了那么久,除非开会)。


如下是在linux管理界面查询外拨电话:


[root@sip ~]# /usr/sbin/asterisk -rx "core show channels verbose"
Channel              Context              Extension        Prio State   Application  Data                      CallerID        Duration Accountcode BridgedTo           
SIP/85518-00014136   from-internal        85518               1 Ringing AppDial      (Outgoing Line)           85518           00:00:03             (None)              
SIP/sz800-00014135   macro-dial           s                   7 Up      Dial         SIP/85518,22,trM(auto-blk                 00:00:17             (None)              
2 active channels
1 active call
51431 calls processed
做法:提取当前在通话的所有SIP来作为循环的次数。然后提取每行的时间,通过时间基数小时判断。在这里遇到一个坑,看是工整的行其实并不是,有时候会出现前面少列或者多列的情况。


废话讲了那么多,贴shell


#!/bin/bash
#
SUBJECT="NJ SIP warning"
rm -rf /tmp/njuiphourlog.txt &>/dev/null
touch /tmp/njuiphourlog.txt &>/dev/null
HANG=`/usr/sbin/asterisk -rx "core show channels verbose"|grep "SIP"|pcregrep -o '(\d{2}:){2}\d{2}'|wc -l`
for I in `seq 1 $HANG` ;do
	case `/usr/sbin/asterisk -rx "core show channels verbose"|grep "SIP"|pcregrep -o '(\d{2}:){2}\d{2}'|awk -F: '{print $1}'|head -$I |tail -1` in
		"00")
			;;
		*)
			/usr/sbin/asterisk -rx "core show channels verbose"|grep SIP|grep "SIP"|head -$I |tail -1|awk '{print $1,"\t",$(NF-2)"\t"$(NF-1)}'>> /tmp/njuiphourlog.txt;;
	esac
done
if [[ ! -z `cat /tmp/njuiphourlog.txt` ]];then
	mail -s "$SUBJECT" 隐藏邮箱</tmp/njuiphourlog.txt
fi
然后放入crontab,每隔30分钟就检测一次(一般不超过都不用管没那么严格时间)



[root@sip ~]# crontab -l
*/30 * * * * /root/sipchick.sh >/dev/null 2>&1



后来,直接在zabbix监控,方便实惠

UserParameter=sip-tonghua,/usr/sbin/asterisk -rx "core show channels verbose"|egrep -o "[0-9]{2}:[0-9]{2}:[0-9]{2}"|sort|uniq|wc -l
UserParameter=sip-hour,/usr/sbin/asterisk -rx "core show channels verbose"|egrep -o "[0-9]{2}:[0-9]{2}:[0-9]{2}"|cut -d: -f1|grep -v 00|wc -l


0

评论区