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 /etc/yum.repos.d/CentOS-Base.repo
viが開いたら下をそのまま転記して保存します。
スペース等が入って上手くコピー出来ない場合はこちらを利用してください。
多分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のアドオンパッケージをダウンロードしてインストールします。


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
Makefileを少し修正する必要があるようなので、viで開いて修正します。
20行目あたりにCFLAGS+=-D_GNU_SOURCEという部分の下にCFLAGS+=-DMYSQL_LOGUNIQUEIDを追記して保存します。

vi Makefile

18行目 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.22

Type '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に食わせるファイルを作ります。


cd /usr/src
vi asterisk_mysql
viで開いたファイルに下をそのままペーストして保存してください。
コメント無しのテキストはこちらです。

CREATE DATABASE asterisk; ← asteriskのデーターベースを作る

GRANT INSERT
ON asterisk.*
TO asterisk@localhost ← localhostasteriskに挿入
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.22

Type '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 -A

Database 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 /etc/asterisk/cdr_mysql.conf
viが開いたら下記をそのまま転記します。

[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

[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 ~]#

問題無く再起動が完了すれば、AsteriskCLIにログインして接続テストを行います。

asterisk –r ← AsteriskCLIにログイン
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-csvCSVファイルも同じように出来ていましたので、確認してみてください。
また、CDRをはき出すデーターベースは同じサーバーにある必要がありません。他にMySQLが動いて適切な設定ができればリモートホストにCDR情報を書き出す事も可能です。
MySQLGUIが必要であれば、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が今後の用途のために予約)