You are on page 1of 10

วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 1

วิแคราะห์และรายงาน Queues และ CDR ด้วย Asterisk Queue/CDR Analyzer


Asterisk Queue/CDR Log Analyzer เป็นโปรแกรมอีกตัวหนึ่งซึ่งสามารถวิเคราะห์ Queues ได้แบบละเอียดลึกซึ้งมาก (ลึกซึ้งจริงๆ) ซึ่งท่านที่
ใช้ Asterisk ทา Call Center ไม่ว่าจะขนาดเล็กหรือขนาดใหญ่ก็ต้องรู้จัก Queues เป็นอย่างดีแล้วนะครับ สาหรับท่านที่ใช้ Elastix ผมก็มี
บทความเกี่ยวกับ Queues ด้วยนะครับ นอกจากนั้นโปรแกรม Qnalyzer นี้ยังวิเคราะห์ CDR ได้ด้วยนะครับ

สาหรับการทางานของโปรแกรม Qanalyzer นี้นะครับ มันจะไปอ่านทุกเหตุการ์ที่เกี่ยวข้องกับ Queues จากไฟล์


/var/log/asterisk/queue_log แล้วไรท์ข้อมูลลงดาต้าเบส และอ่าน CDR จากไฟล์ /var/lob/asterisk/csr-csv/Master.csv แล้วไรท์ลงดาต้า
เบสเช่นเดียวกัน แต่คนละเทเบิล

โปรแกรมนี้ประกอบด้วย 3 ส่วนคือ Graph, CDR + Queue และ Loader โดยที่ Graph เอาไว้แสดงผลสถิติต่างๆในรูปแบบกราฟ ส่วน
CDR+Queue เอาไว้อ่านข้อมูลจาก Queue Log และ CDR แล้วไรท์ลงดาต้าเบส ส่วน Loader เอาไว้รันเป็น Daemon เขียนด้วย Python

เอาหล่ะครับเรามาเริ่มติดตั้งโปรแกรม Qanalyzer กันเลยดีกว่า

1. ติดตั้งโปรแกรม Image_Graph
โปรแกรมนี้เอาไว้สร้างกราฟครับ ติดตั้งได้โดยใช้คาสั่ง "pear" บน CentOS ได้เลยครับ แต่อาจต้องติดตั้งโปรแกรมอื่นก่อนแล้วแต่ว่าโปรแกรม
จะฟ้องว่าต้องติดตั้งโปรแกรมอะไรก่อน อันนี้เป็นการติดตั้งบนเครื่องที่ผมใช้ทดสอบครับ

pear channel-update pear.php.net


pear upgrade --force Archive_Tar
pear upgrade pear
pear install Numbers_Roman
pear install Numbers_Words-0.16.1
pear install Image_Color
pear install Image_Canvas-0.3.2
pear install Image_graph-0.7.2

2. ดาวนโหลดโปรแกรม Asterisk Queue/CDR Log Analyzer


เว็บไซต์ http://www.micpc.com/qloganalyzer
ไฟล์ Source Code http://www.micpc.com/qloganalyzer/qanalyzer.tar.gz

wget http://www.micpc.com/qloganalyzer/qanalyzer.tar.gz

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 2

3. ติดตั้งโปรแกรม
ผมจะติดตั้งไว้ใน Root Directory ของ Apache Web Server นะครับคือที่ไดเร็คตอรี่หลัก /var/www/html
tar xzvf qanalyzer.tar.gz -C /var/www/html

จะได้ไดเร็คตอรี่ย่อยชื่อ qanalyzer อยู่ภายใต้ไดเร็คตอรี่หลัก /var/ww/html

4. ติดตั้งดาต้าเบส Queue และ CDR


ท่านใดที่ได้ติดตั้งดาต้าเบส CDR ไว้แล้วจากบทความ Asterisk CDR MySQL หรือบทความ Asterisk-Stat ให้ไปที่ข้อ 4.2 ได้เลยครับ

4.1 ติดตั้ง CDR Database


4.1.1 สาหรับท่านที่ยังไม่เคยติดตั้ง Asterisk CDR Database มาก่อนเลย
แนะนาให้ติดตั้งก่อนครับ เพราะต้องทาหลายขั้นตอนเหมือนกัน โดยอ่านจากบทความนี้ Asterisk CDR MySQL

ซึ่งถ้าทาตามตัวอย่างเราก็จะได้ดาต้าเบสชื่อ asterisk_cdr ภายในมีเทเบิล cdr อยู่ และ User ที่จะเข้ามาใช้ดาต้าเบสนี้ชื่อว่า root และ
Password คือ password

4.1.2 สาหรับท่านที่ติดตั้งแล้ว Asterisk CDR Database ไว้แล้ว


ให้สร้างอีก 1 เทเบิล ตั้งชื่อเป็น cdr2 ก็ได้ครับ เพื่อไม่ให้ข้อมูล CDR ไปปนกับเทเบิล cdr เดิม ดังนี้
สมมติว่าดาต้าเบสชื่อ asterisk_cdr ใช้ user=root และ password=password เข้านะครับ และสร้างดาต้าเบสชื่อ cdr2

mysql -uroot -ppassword asterisk_cdr

ที่พร้อมท์ mysql> วางบรรทัดต่อไปนี้

CREATE TABLE cdr2 (


id int(10) unsigned NOT NULL auto_increment,
billed datetime NOT NULL default '0000-00-00 00:00:00',
uniqueid varchar(32) NOT NULL default '',
userfield varchar(255) NOT NULL default '',
accountcode varchar(20) NOT NULL default '',
src varchar(80) NOT NULL default '',
dst varchar(80) NOT NULL default '',
dcontext varchar(80) NOT NULL default '',
clid varchar(80) NOT NULL default '',

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 3

channel varchar(80) NOT NULL default '',


dstchannel varchar(80) NOT NULL default '',
lastapp varchar(80) NOT NULL default '',
lastdata varchar(80) NOT NULL default '',
calldate datetime NOT NULL default '0000-00-00 00:00:00',
duration int(11) NOT NULL default '0',
billsec int(11) NOT NULL default '0',
disposition varchar(45) NOT NULL default '',
amaflags int(11) NOT NULL default '0',
PRIMARY KEY (`id`)

);

ALTER TABLE `cdr2` ADD INDEX ( `calldate` );


ALTER TABLE `cdr2` ADD INDEX ( `dst` );
ALTER TABLE `cdr2` ADD INDEX ( `src` );
ALTER TABLE `cdr2` ADD INDEX ( `accountcode` );

4.2 ติดตัง้ Queue และ User Database


cd /var/www/html/qanalyzer/install/loader

เราจะสร้างไว้ในดาต้าเบส asterisk_cdr เช่นเดิม


เปิดไฟล์ queuelog.sql
ค้นหาบรรทัด
USE asterisk;
แล้วเปลี่ยนเป็น USE asterisk_cdr;
บันทีกไฟล์แล้วอิมพอร์ตดาต้าเบส
mysql -uroot -ppassword asterisk_cdr < queuelog.sql

เราก็จะได้เทเบิล queuelog และ users ซึ่งเทเบิล queuelog เอาไว้เก็บ Queue ที่โปรแกรมอ่านมาจากไฟล์ /var/log/asterisk/queuelog ส่วน
เทเบิล users เอาไว้เก็บ User/Pass ที่จะใช้ล๊อกอินเข้าเว็บของโปรแกรม

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 4

5. แก้ไขข้อมูลที่จะคอนเน็คกับด้าต้าเบสในไฟล์สาคัญ
5.1 ไฟล์ /var/www/html/qanalyzer/install/cdr/cdrload.php
ไฟล์นี้จะโหลด CDR จากไฟล์ Master.csv ลงดาต้าเบส

$locale_db_host = 'localhost';
$locale_db_name = 'asterisk_cdr';
$locale_db_login = 'root';
$locale_db_pass = 'password';
$logfile = "/var/log/asterisk/cdr-csv/Master.csv";

5.2 ไฟล์ /var/www/html/qanalyzer/install/loader/loadq.py


ไฟล์ loadq.py เป็น Python Script ซึ่งจะโหลดข้อมูลจาก Queue Log ลงดาต้าเบส แก้ไขข้อมูลที่จะคอนเน็คกับดาต้าเบสให้ถูกต้อง ดังนี้

conn = MySQLdb.connect(host = "localhost",


user = "root",
passwd = "password",
db = "asterisk_cdr")

5.3 ไฟล์ /var/www/html/qanalyzer/includes/db_connect.php

if(!isset($hn)) $hn = "localhost";


if(!isset($un)) $un = "root";
if(!isset($ps)) $ps = "password";
if(!isset($ut)) $ut = "users";
if(!isset($lt)) $lt = "queuelog";
if(!isset($ct)) $ct = "cdr2";
if(!isset($db)) $db = "asterisk_cdr";

6. รันสคริปต์เพื่อให้โหลดข้อมูล CDR และ Queue Log ลงดาต้าเบส

6.1 สาหรับ Queue Log


ไฟล์ที่จะทาหน้าที่นี้คือไฟล์ /var/www/html/qanalyzer/install/loader/loadq.sh ในไฟล์ก็มีข้อมูลแค่นี้ครับ

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 5

#!/bin/bash
/var/www/html/qanalyzer/install/loader/loadq.py </var/log/asterisk/queue_log
tail -f -n 0 /var/log/asterisk/queue_log | /var/www/html/qanalyzer/install/loader/loadq.py &

ซึ่งบรรทัดแรกจะอ่านข้อมูล(เก่า)ในไฟล์ /var/log/asterisk/queue_log มาเก็บไว้ในดาต้าเบสก่อน จากนั้นบรรทัดที่ 2 ก็จะคอยดักเอาข้อความ


ใหม่ที่เกิดในไฟล์ queue_log ไปเก็บในดาต้าเบส ไม่ต้องกลัวว่าข้อมูลจะซ้านะครับ เพราะ Script มันจะเช็คก่อน

ลองรัน Script นี้ดูครับ


cd /var/www/html/qanalyzer/install/loader
chmod +x loadq.sh
./loadq.sh

สั่งรันแล้วต้องรอสักพักครับ เพราะว่า Script กาลังดึงข้อมูลและไรท์ลงดาต้าเบส รอจนเสร็จก็จะมีข้อความแจ้งคล้ายๆแบบนี้

69151 rows were inserted

ถ้ารันได้โดยไม่มีปัญหาอะไรก็แสดงว่าเวอร์คครับ ปัญหาส่วนใหญ่ที่รันไม่ได้คือ คอนเน็คกับดาต้าเบสไม่ได้เพราะว่าเราตั้งค่าผิด

6.2 สาหรับ CDR Log


รันไฟล์ /var/www/html/qanalyzer/install/cdr/cdrload.php ครับ แต่ก่อนที่จะรันไฟล์นี้ หากใครตั้งชื่อเทเบิลในข้อ 4.1.2 เป็น "cdr2" หรือชื่อ
อื่นที่ไม่ใช่ "cdr" ให้แก้ไขไฟล์ cdrload.php นี้ก่อนนะครับ ดังนี้

$locale_db_host = 'localhost';
$locale_db_name = 'asterisk_cdr';
$locale_db_login = 'root';
$locale_db_pass = 'password';
$logfile = "/var/log/asterisk/cdr-csv/Master.csv";

$sql="SELECT UNIX_TIMESTAMP(calldate) as calldate FROM cdr2 ORDER BY calldate DESC LIMIT 1";
$sql = "INSERT INTO cdr2 (calldate, clid, src, dst, dcontext, channel, dstchannel, lastapp,

แล้วก็สั่งรันด้วยคาสั่ง
php /var/www/html/qanalyzer/install/cdr/cdrload.php

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 6

รอจนกว่าจะเสร็จครับ รันครั้งแรกกว่าจะเสร็จนานพอสมควรถ้าในไฟล์ Master.csv มีข้อมูลมาก แต่พอครั้งต่อไปก็ไม่นานเท่าไหร่ และไม่ต้อง


ห่วงว่าข้อมูลจะซ้าครับเพราะสคริปต์จะเช็ควันที่ก่อนอัพดาต้าเบส

7. การสั่งอัพเดทข้อมูลใหม่
เมื่อเราต้องการแสดงข้อมูลใหม่ ก็ต้องสั่งรันสคริปต์ loadq.sh ใหม่ สคริปต์นี้ก็จะเช็คไฟล์ CDR และ Queue Log ใหม่ แต่จะไร้ท์ลงดาต้าเบส
เฉพาะข้อมูลใหม่เท่านั้นครับ และจะสังเกตัได้ว่ามันไม่ได้ทางานแบบ Realtime ถ้าต้องการให้ทางานแบบ Realtime ให้ดูหัวข้อต่อไปครับ

สาเหตุที่ดีฟอลท์โปรแกรมนี้ไม่ได้ทางานแบบ Realtime ก็เพราะว่าปกติเวลาเราจะวิเคราะห์ Queue เราไม่ได้ทากันบ่อยๆ หรือไม่ได้ดูแบบ


Realtime การสรุปผลจะสรุปทุกวัน หรือทุกครึ่งวัน หรือถ้าต้องการถี่กว่านั้นก็ทุกชั่วโมง ปกติเราก็จะสั่งงานโดยใช้ Cron ครับ สมมติว่าต้องการ
ทุก 1 ชั่วโมง ก็เขียน Cron แบบนี้

crontab -e

ใส่บรรทัดนี้เพิ่ม
#Asterisk Queue/CDR Analyzer Cron Job
0 * * * * /var/www/html/qanalyzer/install/loader/loadq.sh > /dev/null 2>&1
0 * * * * php /var/www/html/qanalyzer/install/cdr/cdrload.php > /dev/null 2>&1

ซึ่งก็จะดึงข้อมูลทุก 1 ชั่วโมงตามที่เราต้องการ

แต่ดึงทุกชั่วโมงนี่ก็ถี่ไปหน่อยนะครับ ถ้าไม่ต้องการข้อมูลเร่งด่วนก็น่าจะดึงวันละครั้งก็พอ เช่นตอนเที่ยงคืน

* 0 * * * /var/www/html/qanalyzer/install/loader/loadq.sh > /dev/null 2>&1


* 0 * * * php /var/www/html/qanalyzer/install/cdr/cdrload.php > /dev/null 2>&1

7. ติดตั้ง Graphic Library และ Font


7.1 ติดตั้ง gd graphic library และ php-gd
yum -y install gd

และสาหรับการติดตั้ง php-gd ต้องให้สอดคล้องกับเวอร์ชั่นของ php ที่เราได้ติดตั้งอยู่นะครับ

7.2 ติดตั้ง True Type Font


ดีฟอลท์ CentOS รวมทั้ง Linux ตัวอื่นๆด้วยจะไม่รู้จัก True Type Font (ฟอนท์นามสกุล ttf) ของ Windows นะครับ ถ้าไม่ติดตั้งโปรแกรมเพิ่ม
และโชคร้ายของเราตรงที่โปรแกรม Asterisk Queue/CDR Analyzer นี้มันใช้ True Type Font เขียนบนกราฟด้วย สวยงาม (ผมยังไม่เห็นของ

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 7

จริงเลย) แต่ถ้าสนใจแต่เฉพาะข้อมูลรายงานที่เป็นตัวหนังสือและตัวเลข ก็ไม่ต้องติดตั้ง TTF ก็ได้ครับ

เว็บ http://corefonts.sourceforge.net จะบอกรายละเอียดของการติดตั้ง TTF บน Linux

ผมสรุปให้แบบนี้ครับ ติดตั้งโปรแกรมอื่นเพิ่มเติม ดังนี้


yum -y install freetype-devel libtool ttmkfdir chkfontpath

และอีก 2 โปรแกรมต้องติดตั้งเอง
cabextract
msttcorefonts

ปล. สาหรับโปรแกรม ttmkfdir และ chkfontpath ผมก็มีให้ด้วยนะครับเวอร์ชั่นใหม่กว่าติดตั้งจาก yum อีก ดาวน์โหลด ttmkfdir และ
chkfontpath ได้เลย
หรือถ้าท่านที่อยากเอาไปทาเองผมก็มีไฟล์ .spec และ .srpm ให้ด้วยนะครับดังนี้ chkfontpath, ttmkfdir รายละเอียดวิธีการติดตั้งลองค้นดู
ในเน็ตครับ ถือถามผมก็ได้ เพราะถ้าผมเขียนบอกในนี้มันจะยืดยาวเกินไป

เมื่อติดตั้ง msttcorefonts ก็จะได้ไฟล์ True Type Fonts อยู่ในไดเร็คตอรี่ /usr/share/fonts/msttcorefonts ให้ทา Symbolic Link เป็น
/usr/share/pear/Image/Canvas/Fonts ตามนี้ครับ

ln -s /usr/share/fonts/msttcorefonts /usr/share/pear/Image/Canvas/Fonts
cp /usr/share/pear/Image/Canvas/Fonts/verdana.ttf /usr/share/pear/Image/Canvas/Fonts/Verdana.ttf

บรรทัดที่ 2 เปลี่ยนชื่อไฟล์จาก verdana.ttf เป็น Verdana.ttf ครับ ไม่งั้นกราฟจะไม่มีตัวหนังสือ

7.3 รีสตาร์ท xfs


xfs เป็น Font server ครับ

service xfs reload

7.4 เทสกราฟ
http://x.x.x.x/qanalyzer/install/graph/graph_test.php
ถ้าเห็นกราฟพร้อมตัวหนังสือแสดงว่าเวอร์คครับ (เห็นแต่กราฟก็ยังไม่เวอร์ค)

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 8

8. ดูรายงานจากเว็บ
http://x.x.x.x/qanalyzer
ดีฟอลท์ Username/Password คือ admin/admin ครับ
หน้าล๊อกอิน

หน้าหลัก

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 9

Queue: Call Complete By Caller

Queue: Call Entering Queue

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com


วิเคราะห์และรายงาน Queues ด้วย Asterisk Queue/CDR Analyzer 10

Queue: Call Abandoned

9. เปลี่ยน Username/Password ล๊อกอินเข้าโปรแกรม


ตอนนี้โปรแกรม Asterisk Queue/CDR Analyzer นี้ยังเปลี่ยน Username/Password จากโปรแกรมไม่ได้นะครับ ถ้าต้องการเปลี่ยนต้องเข้า
ไปเปลี่ยนในดาต้าเบสเอง

mysql -uroot -ppassword asterisk_cdr

ที่พร้อมท์ mysql> ให้ทาดังนี้


เปลี่ยนพาสเวอร์ด admin เป็น admin1234

UPDATE asterisk_cdr.users SET password = 'admin1234' WHERE users.id =1;

เพิ่ม admin อีกคน

INSERT INTO asterisk_cdr.users (id, userid, password, level, state) VALUES (NULL, 'kikka', 'kenji', '1', 'y');

ยังมีบทความเกี่ยวกับ Asterisk, Elastix, Centos, VoIP อีกมากมายนะครับที่ http://www.voip4share.com

บทความโดย “คุณหนุ่ย” แห่งเว็บ www.voip4share.com

You might also like