Asterisk CDR(呼情報)をODBCでMySqlへ格納

Asterisk 設定を MySQL に格納してリアルタイム変更では、asterisk-addons モジュールで呼情報をMySqlへ格納する方法を紹介しましたが、Asterisk 1.8 以降ではODBCを使用する方法が推奨となったのでその方法を紹介します。

CentOS 6.6 でMySql 5.1.73 および Asterisk 1.8.25 がインストールされている前提です。

Asterisk CDR(呼情報)をODBCでMySqlへ格納するための関連するAsterisk の構成ファイルとODBC/Database の関係です。

Asterisk 側                                   
cdr_adaptive_odbc.conf -> res_odbc.conf -> /etc/odbc.ini

Linux 側
/etc/odbc.ini -> MySql database

1. Asterisk 用のデータベースを作成

mysql コマンドで root でログインします。

# mysql -u root -p
Enter password:

次に、ユーザーを作成します。ここではユーザーを asterisk 、パスワードを asterpassとします。

mysql> CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'asterpass';

続いて、データベースを作成します。ここではデータベース名を asterisk とします。

mysql> CREATE DATABASE asterisk;

さらに、作成したユーザーにデータベースへの権限を付与します。

mysql> GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost';

以上でデータベース作成は終了。一旦、MySql コンソールから抜けます。

mysql> exit

次に、呼情報を格納するテーブルを作成します。先ほど作成したユーザーとパスワードでmysqlコンソールへログインします。

# mysql -u asterisk -p
Enter password:

データベース一覧には asterisk が表示されます。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| asterisk           |
+--------------------+

asterisk データベースを指定して cdr テーブルを作成します。

mysql> use asterisk;
Database changed

続けて、以下の CREATE TABLE 文を実行

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 '',
	 `uniqueid` VARCHAR(32) NOT NULL default '',
	 `linkedid` VARCHAR(32) NOT NULL default '',
	 `sequence` VARCHAR(32) NOT NULL default '',
	 `peeraccount` VARCHAR(32) NOT NULL default ''
	 );

ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );

参考:
https://wiki.asterisk.org/wiki/display/AST/CDR+Fields
https://wiki.asterisk.org/wiki/display/AST/MySQL+CDR+Backend

2. ODBC ドライバーのインストール

# yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel

3. MySql 接続用のODBCドライバーのインストール

# yum install mysql-connector-odbc

上記コマンドが完了したら、下記コマンドでドライバーの確認。[MySQL] が表示されればOKです。

# odbcinst -q -d
[PostgreSQL]
[MySQL]

4. ODBC設定の追加

/etc/odbc.ini へAsteriskデータベースへの接続情報を記述追加します。

[asterisk-connector]
Description           = MySQL connection to 'asterisk' database
Driver                = MySQL
Database              = asterisk
Server                = localhost
UserName              = asterisk
Password              = asterpass
Port                  = 3306
Socket                = /var/lib/mysql/mysql.sock

5. AsteriskのODBCモジュールのインストール

Asterisk のビルド時にODBCドライバーがシステムにインストールされていない場合、AsteriskのODBCモジュールはデフォルトで入っていないはずなので追加し、再ビルドします。

Asterisk のソースツリー(例: /usr/local/src/asterisk-1.8.25/) へ移動して下記コマンドを実行します。

# cd /usr/local/src/asterisk-1.8.25/
# ./configure
# make menuselect
# make install

6. AsteriskとODBC接続の構成

最後に、Asterisk からODBCでMySqlデータベースへ接続するために設定を /etc/asterisk/res_odbc.conf へ追加します。

[asterisk]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => asterpass
pooling => no
limit => 1
pre-connect => yes

7. 構成の確認

Asterisk を再スタートし、Asterisk コンソールからODBCの構成を確認

localhost*CLI> odbc show

ODBC DSN Settings
-----------------
  Name:   asterisk
  DSN:    asterisk-connector
    Last connection attempt: 1970-01-01 09:00:00
  Pooled: No
  Connected: Yes

8. 呼情報テーブル (cdr) の設定

Asterisk 呼情報を cdr テーブルへ格納するように設定するために /etc/asterisk/cdr_adaptive_odbc.conf を変更します。

[adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate

参考:
http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/database_storing-cdr.html

Asteriskを再起動します。

# /sbin/service asterisk restart

Asterisk コンソールから cdr 設定の確認をします。Registered Backends に cdr-custom, Adaptive ODBC と csv が確認できます。

# /usr/sbin/asterisk -rvvvvvvvvvvvvvvvvvv

localhost*CLI> cdr show status

Call Detail Record (CDR) settings
----------------------------------
  Logging:                    Enabled
  Mode:                       Simple
  Log unanswered calls:       No

* Registered Backends
  -------------------
    cdr-custom
    Adaptive ODBC
    csv

8. 動作確認

呼情報がMySqlへ格納されるか動作確認してみます。
ここでは、SIP #3001 と #2001 へ双方へ電話した後の cdr テーブルの情報を見ます。

# mysql -u asterisk -p
Enter password: 

mysql> use asterisk;
mysql> select * from cdr;
+---------------------+---------------+------+------+----------+-------------------+-------------------+---------+---------------+----------+---------+-------------+----------+-------------+-----------+--------------+--------------+----------+-------------+
| calldate            | clid          | src  | dst  | dcontext | channel           | dstchannel        | lastapp | lastdata      | duration | billsec | disposition | amaflags | accountcode | userfield | uniqueid     | linkedid     | sequence | peeraccount |
+---------------------+---------------+------+------+----------+-------------------+-------------------+---------+---------------+----------+---------+-------------+----------+-------------+-----------+--------------+--------------+----------+-------------+
| 2015-02-05 17:40:31 | "3001" <3001> | 3001 | 2001 | default  | SIP/3001-00000000 | SIP/2001-00000001 | Dial    | SIP/2001,,rtT |        7 |       2 | ANSWERED    |        3 |             |           | 1423125631.0 | 1423125631.0 | 0        |             |
| 2015-02-05 17:40:50 | "2001" <2001> | 2001 | 3001 | default  | SIP/2001-00000002 | SIP/3001-00000003 | Dial    | SIP/3001,,rtT |        5 |       4 | ANSWERED    |        3 |             |           | 1423125650.2 | 1423125650.2 | 3        |             |
+---------------------+---------------+------+------+----------+-------------------+-------------------+---------+---------------+----------+---------+-------------+----------+-------------+-----------+--------------+--------------+----------+-------------+
2 rows in set (0.00 sec)

以上です。

“Asterisk CDR(呼情報)をODBCでMySqlへ格納” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です