본문 바로가기

오픈소스/아스터리스크

[Asterisk] Ubuntu 18.04/Asterisk 15: CDR Reporting to MySQL

 아스터리스크에는 두 가지 Report 시스템이 있습니다. 통화 세부 정보 기록(CDR) 및 채널 이벤트 기록(CEL) . 이 두 시스템 모두 통화 및 개별 채널에서 발생하는 특정 이벤트를 기록합니다. 이벤트 및 해당 세부 정보는 Asterisk의 표준 로깅 및 디버그 기능과 별도로 기계에서 읽을 수 있는 형식으로 제공됩니다. 두 시스템 모두 최소한 CSV 출력을 제공하고 다른 모듈을 활용하여 다양한 백엔드 인터페이스를 통해 출력합니다.

 

이번 문서에서는 아스터리스크의 CDR 을 위한 Mysql 을 설치하는 방법에 대해 알아보도록 하겠습니다. 

설치과정에서 우분투 18.04를 사용하였고, 아스터리스크 15버전을 이용하여 연동하였습니다.

 

 

# Contents


  • Mysql install
  • Mysql ODBC
  • Asterisk ODBC

 

# Mysql Install


먼저 Mysql 을 설치해야 합니다. 

 

sudo apt-get mysql-server libmyodbc install

 

리눅스 18.04 의 경우에는 libmyodbc가 먹히지 않으니, libmyodbc는 제외하고 설치합니다.

libmyodbc가 설치되면 ODBC 설정은 필요 없습니다.

 

그리고, 아스터리스크에서 지원하는 cdr 변수를 넣어주기 위해 해당 경로에서 sql문을 작성합니다.

 

cd /tmp 
vi cdr.sql

 

다음을 복사하여 새 파일에 붙여넣습니다.

 

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 '', 
        uniqueid varchar(32) NOT NULL default '', 
        userfield varchar(255) NOT NULL default '' 
);

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

 

 

mysql에서는 값을 0000-00-00 00:00:00 으로 default 시킬 수 없기 때문에 다음 한 줄을 추가해서 저장합니다.

 

SET sql_mode = '';

 

이제 저장하고 종료합니다.

다음은 Mysql 에서 로그인 하여 설정하는 부분입니다.

 

저장이 완료 되었으면 MySQL에 로그인합니다

 

mysql -u root -p

 

데이터베이스 생성하기:

 

CREATE DATABASE asterisk;

 

데이터베이스가 생성되었으면 생성된 데이터베이스 안에 아까 만든 sql문을 넣겠습니다.

 

생성된 데이터베이스를 지정해줍니다:

 

USE asterisk;

 

“Database changed.”라는 문고가 나오면 현재 이 데이터베이스의 삽입, 수정, 갱신 등을 할 수 있는 상태가 됩니다.

 

아까 만든 sql문을 불러옵니다:

 

SOURCE /tmp/cdr.sql

 

그러면 아마도 “0 rows affected”라는 메시지가 출력 될 것입니다.

 

cdr 테이블을 검사해봅니다:

 

DESCRIBE cdr;

 

아마도 16개의 rows 가 출력이 될 것입니다. 그러면 cdr 테이블이 갱신 되었다는 것을 확인할 수 있습니다.

CDR테이블을 관리하는 유저를 생성해 보도록 합시다.

 

유저 생성:

 

CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'yourpasswordhere';

 

이제 모든 작업이 완료되었으므로 이 사용자에게 권한을 부여합니다. 보안을 위해 사용자는 테이블이나 전체 데이터베이스가 아닌 데이터만 추가하거나 제거할 수 있습니다.

 

퍼미션 추가:

 

GRANT SELECT, INSERT, UPDATE, DELETE ON asterisk.* TO 'asterisk'@'localhost';

 

다시 확인하려면 다음 명령을 실행할 수 있으며 나열된 권한이 표시되어야 합니다:

 

mysql> SHOW GRANTS FOR 'asterisk'@'localhost';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for asterisk@localhost                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'asterisk'@'localhost' IDENTIFIED BY PASSWORD '*CCC9275DB00A1C4GH9B756752F9896DBF5EBE395' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `asterisk`.* TO 'asterisk'@'localhost'                                  |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

 

이제 우리는 MySQL 측에서 끝났습니다. 콘솔을 나가려면 "exit"를 입력하십시오.

 

# Mysql ODBC


ODBC를 설정하려면 해당 ODBC를 설치해야 합니다. ODBC 설치를 위해서는 다음 주소에 버전을 확인하여 커넥터를 설치 해주시기 바랍니다. MySQL :: Download Connector/ODBC

 

리눅스 기준으로 설명하도록 하겠습니다.

압축을 해제 한 후에 ODBC 실행 파일만 lib/odbc 폴더로 이동하도록 하겠습니다.

 

압축 해제 후 이동:

 

tar -xvf mysql-connector-odbc-8.0.15-linux-glibc2.12-x86-64bit.tar.gz
sudo cp mysql-connector-odbc-8.0.15-linux-glibc2.12-x86-64bit/lib/libmyodbc8* /usr/lib/x86_64-linux-gnu/odbc/

 

이동한 파일을 ODBC 드라이버를 등록하도록 하겠습니다.

 

드라이버 관리자 등록:

 

sudo mysql-connector-odbc-8.0.15-linux-glibc2.12-x86-64bit/bin/myodbc-installer -d -a -n "(드라이버명)" -t "DRIVER=(드라이버경로)";

 

위의 해당 작업은 다음과 같습니다.

 

vi /etc/odbcinst.ini:

 

[MySQL]
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so
UsageCount=1

 

그리고 DSN을 등록합니다.

 

DSN 등록:

 

sudo mysql-connector-odbc-8.0.15-linux-glibc2.12-x86-64bit/bin/myodbc-installer -s -a -c2 -n "(DSN명칭)" -t "DRIVER=(드라이버명);SERVER=(IP);DATABASE=mysql;UID=(ID);PWD=(PW)"

 

위의 해당 작업은 다음과 같습니다.

 

vi /etc/odbcinst.ini:

 

[test]
Driver=MySQL
SERVER=127.0.0.1
UID=root
PWD=root
DATABASE=mysql

 

그러면 드라이버가 성공적으로 등록이 된 것을 확인할 수 있습니다.

 

 

# Asterisk ODBC


ODBC가 설정이 완료 되었으면 Asterisk에서 MySQL 을 CDR 이라는 Call Data Record를 기록할 수 있습니다. 그러면 설정을 시작하겠습니다.

 

위의 2번을 정상적으로 실행하였으면, ODBC가 등록된것을 vi /etc/odbcinst.ini 로 확인할 수 있었습니다. 그러면 Asterisk의 DSN을 따로 만들어 처리하도록 하겠습니다.

 

/etc/odbc.ini 파일을 다음과 같이 추가:

 

[MySQL-asterisk]
Driver          = MySQL
Description     = MySQL Connector for Asterisk
Server          = localhost
Port            = 3306
Database        = asterisk
username        = asterisk
password        = asteriskpasswordhere
Option          = 3
Socket          = /var/run/mysqld/mysqld.sock

 

방법 1

/etc/asterisk/res_odbc.conf 파일을 다음과 같이 추가:

 

[asterisk]
enabled=yes
dsn=MySQL-asterisk
username=asterisk
password=yourasteriskpasswordhere
pooling=no
limit=1
pre-connect=yes
share_connections=yes
sanitysql=select 1
isolation=repeatable_read

 

/etc/asterisk/cdr_odbc.conf 파일을 다음과 같이 추가:

 

[global]
dsn=asterisk
loguniqueid=yes
table=cdr
dispositionstring=yes
usegmtime=no
hrtime=yes

 

cdr_manager.conf 파일을 다음과 같이 추가:

 

[general]
enabled = yes

 

마지막으로, /etc/cdr_adaptive_odbc.conf 파일을 다음과 같이 추가:

 

[asteriskcdr]
connection=asterisk
table=cdr
alias start=calldate

 

방법 2

cdr_mysql.conf 에 값을 추가:

 

[global]
hostname=localhost
dbname=asterisk
table=cdr
password=root
port=3306
sock=/var/run/mysqld/mysqld.sock

 

Asterisk를 재시작:

 

sudo service asterisk restart

 

 

# 마무리 및 테스트


Asterisk에 다음 명령어를 입력:

 

asterisk*CLI> cdr show status

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

* Registered Backends
  -------------------
    Adaptive ODBC
    cdr_manager
    ODBC

 

 

Asterisk에 다음 명령어를 입력:

 

asterisk*CLI> odbc show all

ODBC DSN Settings
-----------------

  Name:   asterisk
  DSN:    MySQL-asterisk
    Last connection attempt: 1969-12-31 17:00:00
  Pooled: No
  Connected: Yes


 

MySQL에 다음 명령어를 입력:

 

mysql> select * from cdr;

+---------------------+------------+-------+------+---------------+--------------------+------------+---------+----------+----------+---------+-------------+----------+-------------+--------------+-----------+

| calldate            | clid       | src   | dst  | dcontext      | channel            | dstchannel | lastapp | lastdata | duration | billsec | disposition | amaflags | accountcode | uniqueid     | userfield |

+---------------------+------------+-------+------+---------------+--------------------+------------+---------+----------+----------+---------+-------------+----------+-------------+--------------+-----------+

| 2021-08-02 08:46:35 | "" <junho> | junho | 7777 | from-internal | SIP/junho-00000000 |            | Hangup  |          |       12 |      12 | ANSWERED    |        3 |             | 1627861595.0 |           |

| 2021-08-02 08:46:35 | "" <junho> | junho | 7777 | from-internal | SIP/junho-00000000 |            | Hangup  |          |       12 |      12 | ANSWERED    |        3 |             | 1627861595.0 |           |

+---------------------+------------+-------+------+---------------+--------------------+------------+---------+----------+----------+---------+-------------+----------+-------------+--------------+-----------+

 

 

 

 

 

 

 

 

 

'오픈소스 > 아스터리스크' 카테고리의 다른 글

[EAGI] Asterisk EAGI 노드버전  (0) 2021.09.28
[설치] Asterisk 설치  (0) 2021.09.14
[이론] Asterisk  (0) 2021.09.14