trixboxProでCDR(通話履歴/Call Deteil Recording)をMySQLで管理する方法
Asteriskを含むtrixboxProの通話履歴は通常CSVファイルで/var/log/asterisk/cdr-csvに保存されます。
コールセンター等で詳細に分析したい場合に、CSVをいちいち読み出してちゃ実用的じゃないので、CDR(通話履歴/Call Deteil Recording)をMySQLで管理したい場合の手順をまとめておきます。
今回はtrixboxProのみ対応した手順です。
trixboxProはyumのリポジトリにCentOSの標準的なリポジトリ設定がありませんので、まずCentOSのリポジトリを登録します。
viが開いたら下をそのまま転記して保存します。
vi /etc/yum.repos.d/CentOS-Base.repo
スペース等が入って上手くコピー出来ない場合はこちらを利用してください。
多分baseだけで大丈夫だと思いますが、一応全部書いておきます。
[base]
name=CentOS-$releasever – Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=1
#released updates[updates]
name=CentOS-$releasever – Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=1
#packages used/produced in the build but not released[addons]
name=CentOS-$releasever – Addons
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
#baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=1
#additional packages that may be useful[extras]
name=CentOS-$releasever – Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=1
#additional packages that extend functionality of existing packages[centosplus]
name=CentOS-$releasever – Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
#contrib - packages by Centos Users[contrib]
name=CentOS-$releasever – Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib.
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
priority=2
Asteriskのアドオンパッケージをダウンロードしてインストールします。
Makefileを少し修正する必要があるようなので、viで開いて修正します。
cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-addons-1.2.1.tar.gz
tar zxvf asterisk-addons-1.2.1.tar.gz
cd asterisk-addons-1.2.1
20行目あたりにCFLAGS+=-D_GNU_SOURCEという部分の下にCFLAGS+=-DMYSQL_LOGUNIQUEIDを追記して保存します。
続いてコンパイルです。
vi Makefile18行目 CFLAGS+=-fPIC
19行目 CFLAGS+=-I../asterisk
20行目 CFLAGS+=-D_GNU_SOURCE
21行目 CFLAGS+=-DMYSQL_LOGUNIQUEID ← 追加
make clean
make
make install
次にMySQLをインストールします。
yum clean all
yum -y install mysql-server
rm /etc/yum.repos.d/CentOS-Base.repo ← CentOSのリポジトリを削除
chkconfig --levels 345 mysqld on ← MySQLの自動起動設定
service mysqld start ← MySQL起動
MySQLのrootユーザーにパスワードを設定します。
[root@trixbox123456 ~]# mysql -u root ← MySQLサーバーへrootユーザでログイン
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.1.22Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select user,host,password from mysql.user; ← 登録済ユーザ、パスワード確認
mysql> set password for root@localhost=password('password123456'); ← ホスト名がlocalhostのrootユーザにパスワードpassword123456を設定
mysql> set password for root@trixbox123456=password('password123456'); ← ホスト名がtrixbox123456のrootユーザにパスワードpassword123456を設定mysql> select user,host,password from mysql.user; ← 再度、登録済ユーザ、パスワード確認
登録済みユーザーにパスワードが登録されていることを確認する。
mysql> exit ← MySQLサーバーからログアウト
Bye
次にCDR(通話履歴/Call Deteil Recording)を書き出すAsteriskデーターベースを作成します。
手順は色々ありますが、今回は手っ取り早く作ります。
まず下記手順でMySQLに食わせるファイルを作ります。
viで開いたファイルに下をそのままペーストして保存してください。
cd /usr/src
vi asterisk_mysql
コメント無しのテキストはこちらです。
CREATE DATABASE asterisk; ← asteriskのデーターベースを作るGRANT INSERT
ON asterisk.*
TO asterisk@localhost ← localhostのasteriskに挿入
IDENTIFIED BY 'password123456'; ← 先の手順で設定したroot@localhostのパスワードを入力USE asterisk;
CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`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',
`accountcode` varchar(20) NOT NULL default '',
`userfield` varchar(255) NOT NULL default ''
);ALTER TABLE `cdr` ADD `uniqueid` VARCHAR(32) NOT NULL default '';
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
次にMySQLに作ったファイルを読み込ませます。
mysql --user=root --password=(rootのパスワード) < asterisk_mysql
上の例だと
mysql --user=root --password=password123456 < asterisk_mysql
データーベースにAsteriskが登録されていることを確認。
[root@trixbox123456 ~]# mysql -u root -ppassword123456 ← MySQLサーバーへrootユーザでパスワードがpassword123456でログイン
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.1.22Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select user,host,password from mysql.user;
mysql> use asterisk; ← データーベースを変更
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables status from asterisk; ← テーブル情報を表示
Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
cdr | MyISAM | 9 | Dynamic | 2 | 156 | 312 | 4294967295 | 4096 | 0 | NULL | 2010-01-12 19:51:02 | 2010-01-12 20:01:56 | 2010-01-12 19:51:02 | utf8_general_ci | NULL |
mysql> show columns from cdr; ← カラム情報表示
Field | Type | Null | Key | Default | Extra |
calldate | datetime | MUL | 0000-00-00 00:00:00 | ||
clid | varchar(80) | ||||
src | varchar(80) | ||||
dst | varchar(80) | MUL | |||
dcontext | varchar(80) | ||||
channel | varchar(80) | ||||
dstchannel | varchar(80) | ||||
lastapp | varchar(80) | ||||
lastdata | varchar(80) | ||||
duration | int(11) | 0 | |||
billsec | int(11) | 0 | |||
disposition | varchar(45) | ||||
amaflags | int(11) | 0 | |||
accountcode | varchar(20) | MUL | |||
userfield | varchar(255) | ||||
uniqueid | varchar(32) |
mysql> exit ← MySQLサーバーからログアウト
Bye参考の表の様に表示されていれば、MySQLの準備は完了です。
次はAsteriskを設定します。
viが開いたら下記をそのまま転記します。
vi /etc/asterisk/cdr_mysql.conf
保存して終了。
[global]
hostname=localhost
dbname=asterisk
password=password123456 ← 先の手順で設定したroot@localhostのパスワードを入力
user=root ← 後述しますが、rootじゃない方が理想です。本当は先の手順でrootではなくてCDR用にユーザーを作るべき。
;port=3306 ← DBのポートがデフォルトの3306以外の場合はコメントを外して指定する事。
;sock=/tmp/mysql.sock
;userfield=1
Asteriskを再起動します。
service asterisk restart
問題無く再起動が完了すれば、AsteriskのCLIにログインして接続テストを行います。
[root@trixbox123456 ~]# service asterisk restart
Stopping PBXtra Core service: [ OK ]Sangoma A200 AFT-REMORA Shark analog board
Starting PBXtra Core service: [ OK ]
Starting FONmon service:
[root@trixbox123456 ~]#
asterisk –r ← AsteriskのCLIにログイン
Asterisk fon_p_1.2.17-JP, Copyright (C) 1999 - 2006 Digium, Inc. and others.
Created by Mark Spencer
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'show license' for details.
=========================================================================
Connected to PBXtra Core fon_p_1.2.17-JP currently running on trixbox123456 (pid = 11572)
Verbosity is at least 3
trixbox123456*CLI> cdr mysql status ← 接続確認
Connected to asterisk@localhost using table cdr for 5 seconds. ← 接続に成功していればこの様なメッセージが表示される
Wrote 0 records since last restart.trixbox123456*CLI> cdr mysql status ← 接続確認
Not currently connected to a MySQL server. ← 接続に失敗していればこの様なメッセージが表示される
実際に通話してみてログが保存されるか確認してください。
発信と着信を行った後、データーベースを確認します。
[root@trixbox123456 ~]# mysql -u root -ppassword123456 ← MySQLサーバーへrootユーザでパスワードがpassword123456でログイン
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10 to server version: 4.1.22
mysql> use asterisk; ← データーベースを変更
mysql> select * from cdr; ← 通話記録を確認
mysql> exit ← MySQLサーバーからログアウト
Bye
テストした環境では/var/log/asterisk/cdr-csvにCSVファイルも同じように出来ていましたので、確認してみてください。
また、CDRをはき出すデーターベースは同じサーバーにある必要がありません。他にMySQLが動いて適切な設定ができればリモートホストにCDR情報を書き出す事も可能です。
MySQLのGUIが必要であれば、phpMyAdmin(要PHP)など色々ありますのでお試しあれ。
※上の内容ではrootユーザーでデーターベースを利用する様になっています。
セキュリティの観点からも望ましくないので、MySQLの様々なドキュメントを参考に適切に設定してください。
また、開発元Fonalityやクルーグは上記手順を保証しておりません。
あと、余談ですが運用の途中でMySQLを利用する場合、過去のCSVファイルをMySQLにインポートする必要があります。
ドキュメントは沢山あるようなので以下を参考になさってください。
http://www.voip-info.org/wiki/view/Asterisk+CDR+csv+conversion+mysql
参考までにtrixboxProのCDRの項目毎の情報です。
実際に利用される場合は、しっかり検証してからご利用ください。
accountcode:アカウントコード指定(trixboxProが今後の用途のために予約)
src:発信者番号(string, 80文字)
dst:受信内線番号(string, 80文字)
dcontext:発信先コンテキスト/サブメニュー(string、80文字)
clid:発信者番号のテキスト表示(80文字)
channel:利用チャネル(80文字)
dstchannel:受信チャネル(80文字)該当する場合
lastapp:最後のアプリケーション(80文字)該当する場合
lastdata:最後のアプリケーションデータ(arguments)(80文字)
start:呼の開始(日付/時間)
answer:呼の応答(日付/時間)
end:呼の終了(日付/時間)
duration:システムの合計時間、秒(整数)
billsec:通話時間/捨て呼の合計時間、秒(整数)
disposition:呼の状態:応答、応答なし、話し中
amaflags:請求フラグ(trixboxProが今後の用途のために予約)