Asterisk : Comment configurer odbc pour stocker les cdr dans mysql

Procédure afin d’installer et configurer odbc pour un serveur linux debian afin d’y stocker nos précieux CDR.

Table des matières

Introduction

Tout d’abord nous allons supposer que les serveurs Asterisk et MySQL sont parfaitement installés et configurés (et sécurisés 🙂 ). Ce n’est pas l’objet de ce guide (Howto).

Installation d’ODBC

Nous allons commencer par installer les drivers ODBC nécessaires. Installer les paquets nécessaires pour le bon fonctionnement de ODBC et MySQL :

apt-get install unixodbc libmyodbc unixodbc iodbc

Maintenant, nous allons configurer odbc afin de se connecter à notre serveur MySQL.

Paramétrage de ODBC

Editer le fichier suivant /etc/odbcinst.ini, et copier les éléments suivants :

[MySQL]
Description = MySQL ODBC Driver
Driver = /usr/lib/odbc/libmyodbc.so
Setup = /usr/lib/odbc/libodbcmyS.so
CPTimeout = 0
CPReuse = 0

Maintenant, il faut éditer /etc/odbc.ini et ajouter le code suivant :

[MySQL-asterisk]
Description = Connection to MySQL
Driver = MySQL
Socket = /var/run/mysqld/mysqld.sock
Server = localhost
User = YourUsername
Password = YourPassword
Database = YourDatabase
Option = 3

N’oublier pas d’adapter le User, Password et Database selon vos éléments, sinon vous obtiendrez une belle erreur !.

Création de la base de données CDR

Connectez vous à votre serveur MySQL et entrez le code suivant (attention aux espaces qui peuvent causer des erreurs)

CREATE TABLE cdr(calldate DATETIME NOT NULL,clid varchar(80) NOT NULL DEFAULT'aDefaultValue',src varchar(80) NOT NULL DEFAULT 'aDefaultValue',dstVARCHAR(80) NOT NULL DEFAULT 'aDefaultValue',dcontext VARCHAR(80) NOT NULLDEFAULT  'aDefaultValue',channel VARCHAR(80) NOT NULL DEFAULT 'aDefaultValue',dstchannel VARCHAR(80) NOT NULL DEFAULT'aDefaultValue',lastapp VARCHAR(80) NOT NULL DEFAULT  'aDefaultValue',lastdataVARCHAR(80) NOT NULL DEFAULT  'aDefaultValue',duration int(11) NOT NULLDEFAULT '0',billsec int(11) NOT NULL DEFAULT '0',disposition VARCHAR(45) NOTNULL DEFAULT  'aDefaultValue',amaflags int(11) NOT NULL DEFAULT'0',accountcode VARCHAR(20) NOT NULL DEFAULT  'aDefaultValue',uniqueidVARCHAR(32) NOT NULL DEFAULT  'aDefaultValue',userfield VARCHAR(255) NOT NULLDEFAULT 'aDefaultValue');

GRANT ALL PRIVILEGES ON YourDatabase.* TO YourUsername@localhost IDENTIFIED BY 'YourPassword';

FLUSH PRIVILEGES;

Il faut tester le bon fonctionnement de notre connecteur ODBC avant d’aller plus loin. Entrez cette commande dans votre terminal :

isql -v MySQL-asterisk

Si tout fonctionne correctement, vous êtes connecté, sinon vous devriez voir un gentil message d’erreur 🙁 .

Paramétrage d’asterisk

Configuration d’ODBC

Nous allons commencer par paramétrer les fichiers de configuration d’Asterisk afin qu’il puisse utiliser ODBC afin de se connecter au serveur MySQL. Pour cela, nous allons éditer le fichier /etc/asterisk/res_odbc.conf et y ajouter :

[mysql]
enabled => yes
dsn => MySQL-asterisk
username => YourUsername
password => YourPassword
pre-connect => yes

puis, éditer le fichier /etc/asterisk/cdr_odbc.conf, et remplacer les lignes par celles-ci :

[global]
dsn=MySQL-asterisk
;username=asterisk
;password=asterisk
loguniqueid=yes
dispositionstring=yes
table=cdr ;"cdr" is default table name
usegmtime=no

Configuration de cdr.conf

Pour cela, nous allons éditer le fichier /etc/asterisk/cdr.conf et activer l’enregistrement des CDR dans une base de données via ODBC. Pour cela modifier au début du fichier :

enabled = yes

puis ajouter à la fin du fichier les lignes suivantes :

[odbc]
usegmtime=yes
loguniqueid=yes
loguserfiled=yes

Et maintenant redémarrer votre serveur Asterisk, connectez vous à la console et vérifier que le module res_odbc est bien chargé (reload res_odbc). faites de même avec le module cdr_odbc.

Puis faites un appel afin de vérifier que son CDR est bien dans la base de données.

Conclusion

Après avoir suivi attentivement ce guide, vous avez maintenant une installation Asterisk où vous pouvez enregistrer vos CDR via ODBC dans une base de données MySQL locale ou distante. Vous pouvez ainsi par exemple stocker les CDRs de vos serveurs Asterisk dans une base de données centralisées afin d’exploiter des données riches avec une application comme CDR-STATS, afin d’analyser vos appels et extraire de jolies stats pour les chefs.

 

Auteur/autrice : Mathias

Qui suis-je ? Je travaille dans les télécoms et réseaux depuis 1996 (oui, le siècle dernier). Je suis ingénieur en génie électrique et informatique industrielle réseaux et télécoms. Je suis passionné de technologies et je participe à plusieurs projets touchant les télécoms (asterisk et freeswitch notament) et la sécurité informatique (PfSense). J’interviens en tant que freelance afin d'accompagner les entreprises et opérateurs en leur apportant mon expérience et mon expertise.

5 réflexions sur « Asterisk : Comment configurer odbc pour stocker les cdr dans mysql »

  1. ODBC testé sous Elastix 2.3 et 2.4 donc sous Centos et ça marche nickel, juste un petit correctif à apporter, dans [global] dans ton exemple tu as mis dsn=MySQL-asterisk dans res_odbc.conf et dans cdr_odbc.conf ce qui fait redondance, il faut plutôt mettre dsn=mysql dans [global]

    [global]

    dsn=mysql et non "MySQL-asterisk"

  2. Un grand merci pour cet article.
    En revanche, j’ai eu des problèmes au moment de copier le script SQL. Quand je copie/colle dans un éditeur de texte, la syntaxe n’est pas bonne, j’ai eu des problèmes avec des caractères ESPACE qui disparaissaient. Je copie ici le texte sans les espaces, ça servira peut être:
    CREATE TABLE cdr(calldate DATETIME NOT NULL, clid varchar(80) NOT NULL DEFAULT ‘aDefaultValue’, src varchar(80)
    NOT NULL DEFAULT ‘aDefaultValue’,
    dst VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
    dcontext VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
    channel VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
    dstchannel VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
    lastapp VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
    lastdata VARCHAR(80) NOT NULL DEFAULT ‘aDefaultValue’,
    duration int(11) NOT NULL DEFAULT ‘0’,
    billsec int(11) NOT NULL DEFAULT ‘0’,
    disposition VARCHAR(45) NOT NULL DEFAULT ‘aDefaultValue’,
    amaflags int(11) NOT NULL DEFAULT ‘0’,
    accountcode VARCHAR(20) NOT NULL DEFAULT ‘aDefaultValue’,
    uniqueid VARCHAR(32) NOT NULL DEFAULT ‘aDefaultValue’,
    userfield VARCHAR(255) NOT NULL DEFAULT ‘aDefaultValue’);

     
    GRANT ALL PRIVILEGES ON cdr.* TO root@localhost IDENTIFIED BY ‘password’;
     
    FLUSH PRIVILEGES;

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *