1.为何首选zabbix做为呼叫中心的监控系统
- zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案
- zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
- zabbix由2部分构成,zabbix server与可选组件zabbix agent。
- zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
- zabbix是一款linux下的流行监控工具,可以使用zabbix进行呼叫中心性能负载的监控,更有利于了解呼叫中心系统运营情况,本文以流行的astercc呼叫中心系统为例,介绍如何配置zabbix监控astercc系统的:呼入量、呼出量、呼出振铃数、呼出接通数、话务量、坐席总数、坐席签入数目、坐席通话数目、坐席呼入数目、坐席呼出数目、坐席暂停数目(小休、午休、请假、会议、培训、其他)、排队量等等。
2.下载及安装zabbix服务器
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

systemctl stop firewalld.service
systemctl disable firewalld.service
yum install -y epel-release 0

yum -y install wget net-snmp-devel OpenIPMI-devel httpd openssl-devel java lrzsz fping-devel libcurl-devel perl-DBI pcre-devel libxml2 libxml2-devel mysql-devel gcc php php-bcmath php-gd php-xml php-mbstring php-ldap php-mysql.x86_64 php-pear php-xmlrpc net-tools wget vim-enhanced
wget -P /etc/yum.repos.d http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install mariadb mariadb-server php php-mysql httpd
systemctl enable mariadb.service
systemctl start mariadb.service
mysql_secure_installation

systemctl start httpd.service
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

yum -y install zabbix-server-mysql
yum -y install zabbix-web-mysql
yum -y install zabbix-get
mysql -uroot -proot -e "create database zabbix default character set utf8 collate utf8_bin;"
mysql -uroot -proot -e "grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix';"
cd /usr/share/doc/zabbix-server-mysql-3.0.21/
zcat create.sql.gz | mysql -uzabbix -p zabbix
vim /etc/zabbix/zabbix_server.conf
修改以下内容
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
vim /etc/httpd/conf.d/zabbix.conf
#如图示,将时区改为Asia/Shanghai

systemctl start zabbix-server.service
systemctl enable zabbix-server.service
systemctl restart httpd.service
#页面配置
http://localhost/zabbix #localhost为zabbix服务器ip地址







默认账号Admin 密码zabbix
登录成功,zabbix服务器创建完成

选择语言

3.下载及安装zabbix客户端
3.1 zabbix服务器监控本机localhost
yum -y install zabbix zabbix-agent

在安装时如出现如上图所示错误,原因是软件这两个版本不一致,仔细观察发现这两个软件包使用了不同的仓库,把epel的关闭(enabled=0,位于/etc/yum.repos.d/epel.repo)再重装


vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=127.0.0.1
Timeout=30
UnsafeUserParameters=1 # '1'为开启自定义键值
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
systemctl start zabbix-agent
3.2 astercc服务器安装配置zabbix客户端
yum install -y zabbix-agent
cd /etc/zabbix/
mv zabbix_agent.conf zabbix_agent.conf.bak
mv zabbix_agentd.conf zabbix_agentd.conf.bak
vim zabbix_agentd.conf
/etc/init.d/zabbix-agent start
![]()
vim /etc/sysconfig/iptables #开放10050/tcp 端口


zabbix服务器上添加客户端主机


#192.168.1.194为astercc客户端IP
客户端添加自定义键值
vim /etc/zabbix/zabbix_agentd.conf

cat > /home/Realtime_report.sh << EOF
#!/bin/bash
USER=root #mysql user
PASSWORD=astercc #mysql password
#呼入量
INBOUNDCOUNT=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curpbxcdrs where endtime='0000-00-00 00:00:00' and calltype='DIALIN' and memo != 'PREDICTIVE CALLER';" 2>/dev/null|awk 'NR==2{print $1}'`
#呼出量
OUTBOUNDCOUNT=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curpbxcdrs where endtime='0000-00-00 00:00:00' and (userfield='DID DIALOUT' or calltype='DIALOUT') and answertime='0000-00-00 00:00:00';" 2>/dev/null|awk 'NR==2{print $1}'`
#呼出振铃量
OUTBOUNDRINGING=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curpbxcdrs where endtime='0000-00-00 00:00:00' and (userfield='DID DIALOUT' or calltype='DIALOUT') and answertime='0000-00-00 00:00:00';" 2>/dev/null|awk 'NR==2{print $1}'`
#呼出接通量
OUTBOUNDANSWER=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curpbxcdrs where endtime='0000-00-00 00:00:00' and (userfield='DID DIALOUT' or calltype='DIALOUT') and answertime!='0000-00-00 00:00:00';" 2>/dev/null|awk 'NR==2{print $1}'`
#话务量
TRAFFICCOUNT=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curpbxcdrs where endtime='0000-00-00 00:00:00' and memo != 'PREDICTIVE CALLER';" 2>/dev/null|awk 'NR==2{print $1}'`
#坐席总数
AGENTCOUNT=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_agents;" 2>/dev/null|awk 'NR==2{print $1}'`
#坐席签入数目
AGENTCHECKLOGIN=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents;" 2>/dev/null|awk 'NR==2{print $1}'`
#坐席通话数目
AGENTCALL=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='ringing' and status='busy';" 2>/dev/null|awk 'NR==2{print $1}'`
#坐席呼出数目
AGENTOUTBOUND=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curpbxcdrs where endtime='0000-00-00 00:00:00' and (userfield='DID DIALOUT' or calltype='DIALOUT') and agentno!='';" 2>/dev/null|awk 'NR==2{print $1}'`
#坐席呼入数目
AGENTINBOUND=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curpbxcdrs where endtime='0000-00-00 00:00:00' and calltype='DIALIN' and memo !='PREDICTIVE CALLER' and agentno!='';" 2>/dev/null|awk 'NR==2{print $1}'`
#坐席话后数目
AGENTACW=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status!='';" 2>/dev/null|awk 'NR==2{print $1}'`
#坐席暂停数目
AGENTPAUSE=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status='';" 2>/dev/null|awk 'NR==2{print $1}'`
#小休
AGENTREST=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status='' and pause_reason='rest';" 2>/dev/null|awk 'NR==2{print $1}'`
#午休
AGENTLUNCH=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status='' and pause_reason='lunch';" 2>/dev/null|awk 'NR==2{print $1}'`
#请假
LEAVE=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status='' and pause_reason='leave';" 2>/dev/null|awk 'NR==2{print $1}'`
#会议
MEETING=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status='' and pause_reason='meeting';" 2>/dev/null|awk 'NR==2{print $1}'`
#培训
TRAINING=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status='' and pause_reason='training';" 2>/dev/null|awk 'NR==2{print $1}'`
#其他
OTHER=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curagents where status='pause' and acw_status='' and pause_reason='other';" 2>/dev/null|awk 'NR==2{print $1}'`
#排队量
WAIT=`mysql -u$USER -p$PASSWORD astercc10 -e "select count(*) from cc10_curqueuecallers where status='wait';" 2>/dev/null|awk 'NR==2{print $1}'`
#channels
CHANNELS=`asterisk -rx 'core show channels count' 2>/dev/null|awk 'NR==3{print $1}'`
#calls
CALLS=`asterisk -rx 'core show calls' 2>/dev/null|awk 'NR==2{print $1}'`
if [ $1 = 'INBOUNDCOUNT' ]
then
echo $INBOUNDCOUNT
elif [ $1 = 'OUTBOUNDCOUNT' ]
then
echo $OUTBOUNDCOUNT
elif [ $1 = 'OUTBOUNDRINGING' ]
then
echo $OUTBOUNDRINGING
elif [ $1 = 'OUTBOUNDANSWER' ]
then
echo $OUTBOUNDANSWER
elif [ $1 = 'TRAFFICCOUNT' ]
then
echo $TRAFFICCOUNT
elif [ $1 = 'AGENTCOUNT' ]
then
echo $AGENTCOUNT
elif [ $1 = 'AGENTCHECKLOGIN' ]
then
echo $AGENTCHECKLOGIN
elif [ $1 = 'AGENTCALL' ]
then
echo $AGENTCALL
elif [ $1 = 'AGENTOUTBOUND' ]
then
echo $AGENTOUTBOUND
elif [ $1 = 'AGENTINBOUND' ]
then
echo $AGENTINBOUND
elif [ $1 = 'AGENTACW' ]
then
echo $AGENTACW
elif [ $1 = 'AGENTPAUSE' ]
then
echo $AGENTPAUSE
elif [ $1 = 'AGENTREST' ]
then
echo $AGENTREST
elif [ $1 = 'AGENTLUNCH' ]
then
echo $AGENTLUNCH
elif [ $1 = 'LEAVE' ]
then
echo $LEAVE
elif [ $1 = 'MEETING' ]
then
echo $MEETING
elif [ $1 = 'TRAINING' ]
then
echo $TRAINING
elif [ $1 = 'OTHER' ]
then
echo $OTHER
elif [ $1 = 'WAIT' ]
then
echo $WAIT
elif [ $1 = 'CHANNELS' ]
then
echo $CHANNELS
elif [ $1 = 'CALLS' ]
then
echo $CALLS
else
echo "输入变量有误"
fi
EOF
cat > /home/Realtime_report_system.sh << EOF
#!/bin/bash
CPUFREE=`vmstat |awk 'NR==3{print $15}'`
CPULOAD1=`uptime|awk '{print $10}'|awk -F ',' '{print $1}'`
CPULOAD5=`uptime|awk '{print $11}'|awk -F ',' '{print $1}'`
CPULOAD15=`uptime|awk '{print $12}'|awk -F ',' '{print $1}'`
DISKUSAGERATE=`df |grep -e '\/dev\/sda5'|awk '{print $5}'|awk -F '%' '{print $1}'`
MEMALL=`free |grep "Mem"|awk '{print $2}'`
MENUSE=`free |grep "Mem"|awk '{print $3}'`
MEMUSAGERATE=`awk 'BEGIN{printf "%.1f\n",('$MENUSE'/'$MEMALL')*100}'`
if [ $1 = 'CPUFREE' ]
then
echo $CPUFREE
elif [ $1 = 'CPULOAD1' ]
then
echo $CPULOAD1
elif [ $1 = 'CPULOAD5' ]
then
echo $CPULOAD5
elif [ $1 = 'CPULOAD15' ]
then
echo $CPULOAD15
elif [ $1 = 'DISKUSAGERATE' ]
then
echo $DISKUSAGERATE
elif [ $1 = 'MEMUSAGERATE' ]
then
echo $MEMUSAGERATE
else
echo "输入变量有误"
fi
EOF
zabbix服务器端测试键值
zabbix_get -s 192.168.1.194 -k "astercc.info[AGENTCOUNT]"
![]()
返回值 "5" 即坐席数为5 键值创建成功
添加监控项




所有需要监控的键值都在Realtime_report.sh中 替换astercc.info[*]即可
更新后
/etc/init.d/zabbix-agent restart

绿色亮起说明astercc已经被监控
查看最新数据图形显示


#解决页面字体乱码问题
下载simkai.ttf
mv simkai.ttf /usr/share/zabbix/fonts/

vim /usr/share/zabbix/include/defines.inc.php

systemctl restart httpd.service #重启httpd即可解决乱码问题






































