前提提要: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
评论区