Asterisk Call Data Recording (CDR)
Für die Protokollierung von Anrufen gibt es bei Asterisk eine Funktion Namens CDR. CDR steht für „Call Detail Recording“. Standardmäßig werden alle Daten in eine . CSV Datei geschrieben. Um flexibler auf die Daten zugreifen und komplexe Suchabfragen schnell ausführen zu können, können die Dateb in einer MySQL Datenbank gespeichert werden. Um dies zu bewerkstelligen, werden die Asterisk-Addons benötigt. Die jeweils aktuelle Version kann man auf der Asterisk Homepage herunterladen. Um die Addons zu installieren, sind folgende Schritte notwendig:
Herunterladen der Addons
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-addons-1.4.8.tar.gz
Entpacken der Addons
tar -xvzf asterisk-addons-1.4.8.tar.gz
Aktivieren von MYSQL_LOGUNIQUEID
Um die einzelnen Datensätze eindeutig unterscheiden zu können, gibt es die Möglichkeit, für jeden Datensatz eine eindeutige ID zu generieren. Hierzu muss die Datei cdr_addon_mysql.c bearbeitet werden, die sich im Unterverzeichnis cdr des gerade entpackten Ordner befindet.
Die folgende Zeile
#define MYSQL_LOGUNIQUEID
wird ersetzt durch
define MYSQL_LOGUNIQUEID
Kompilieren und Installieren der Addons
Nun können die Addons mit
make
kompiliert und mit
make install
installiert werden
Anlegen der Datenbank
Als nächstes muss die Datenbank vorbereitet werden, in die Asterisk später seine Protokolle schreibt. Für die Verwaltung von MySQL Datenbanken empfehle ich das GUI Tool PHPMyAdmin. Die Bedienung dieses Tools ist nicht Bestandteil dieser Anleitung. Der Einfachkeit halber wird stattdessen die Einrichtung mit Hilfe das Kommandozeilen Tools mysql behandelt.
Die CDR Tabelle kann entweder in einer bestehenden Datenbank angelegt werden, oder es wird zuvor eine neue Datenbank erstellt. Um eine neue Datenbank zu erstellen, muss folgender Befehl ausgeführt werden:
CREATE DATABASE asterisk;
Als nächstes wird die CDR Tabelle erstellt. Das entsprechende SQL Script befindet sich im Ordner doc in den Sourcen der Asterisk-Addons. Für die Addons in der Version 1.4.8 sieht es so aus:
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 ''
);
Wir müssen also folgende Befehle ausführen:
USE asterisk2;
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 ''
);
Zusätzlich sollte für Asterisk ein eigener MySQL User angelegt werden, der das Recht Insert und Select für die betreffende Datenbank hat.
GRANT INSERT, SELECT
ON asterisk.*
TO asterisk@localhost
IDENTIFIED BY 'Passwort';
Die einfachste Möglichkeit die MySQL Befehle auszuführen besteht darin, diese in einer Textdatei zu speichern und nach folgendem Schema zu übergeben:
mysql --user=username --password=password databasename < MeineTextdatei
Die Datenbank ist jetzt für Asterisk vorbereitet.
Als nächstes muss die Datei /etc/asterisk/cdr_mysql.conf angepasst werden:
[global]
;hostname=meinhost.meinedomäne
dbname=asterisk
table=cdr
password=Passwort
user=asterisk
;port=3306
sock=/var/run/mysqld/mysqld.sock
;userfield=1
Ist die Datenbank nicht auf dem gleichen Server wie Asterisk installiert, muss sock auskommentiert und hostname und port definiert werden. Auf localhost ist die Kommunikation über einen Socket performanter.
Die Änderungen müssen jetzt nur übernommen werden:
/etc/init.d/asterisk restart
Asterisk sollte jetzt alle Anrufe in die Tabelle cdr in der Datenbank asterisk protokollieren. Diese Daten können nun recht einfach z.B. mit PHP grafisch aufbereitet werden.