.titleBar { margin-bottom: 5px!important; }

mysql CDR-DB auf Asterisk

Dieses Thema im Forum "Asterisk Allgemein" wurde erstellt von chocoa, 25 Jan. 2006.

  1. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hallo VoIP-Freunde,

    ich bräuchte mal eine Bestätigung von euch ob ich mit meiner Vermutung der Konfiguration richtig liege.
    Ich möchte eine Datenbank anlegen in der eine Tabelle CDR existiert, in welcher alle Calls aufgelisted werden.

    1.)
    cdr_addon_mysql.conf.sample in /etc/astertisk kopieren und umbenennen zu cdr_addon_mysql.conf

    2.)
    cdr_addon_mysql.conf öffnen und ändern
    bei mir:
    [global]
    hostname=localhost
    dbname=asteriskcdrdb
    table=cdr
    password=password
    user=asteriskcdruser
    port=3306
    sock=/tmp/mysql.sock
    userfield=1

    Mir scheint es als ob man bei einigen Fehlern den sock zu /var/run/mysqld/mysqld.sock ändern sollte.
    Muss eigentlich in der cdr_addon_mysql.conf und der my.conf der selbe sock stehen ? Was empfehlt ihr da ?

    Als nächstes habe ich die modules.conf geändert und folgende Zeile hinzugefügt:
    load => cdr_addon_mysql.so

    Mein nächster Schritt war die /etc/mysql/my.cnf zu editieren. Ich habe einfach noch die user und password Zeilen eingefügt.
    [Client]
    user=root
    password=YES
    port=3306
    socket=/var/run/mysqld/mysqld.sock

    Als nächstes habe ich den mysql-Server gestartet und die Datenbank angelegt.

    CREATE DATABASE asteriskcdrdb;

    GRANT INSERT
    ON asteriskcdrdb.*
    TO asteriskcdruser@localhost
    IDENTIFIED BY 'password';

    USE asteriskcdrdb;

    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 INDEX ( `calldate` );
    ALTER TABLE `cdr` ADD INDEX ( `dst` );
    ALTER TABLE `cdr` ADD INDEX ( `accountcode` );


    Dann habe ich den Asterisk mit 'reload' neu gestartet und auf meiner Testmachine kommt keine Fehlermeldung.
    Ich habe dann einmal mit der 88 meine Voicemail aufgerufen und anschließend mit select * from cdr; den Inhalt der Tabelle abgefragt aber es stand nicht drin. Es sollte doch was drin stehen, oder funzt das nur bei ausgehenden Calls ?
    Desweiteren stelle ich mir die Frage ob meine oberen Schritte ausreichend waren oder ob ich irgendwas noch machen muss (editieren, Dateien kopieren, etc.)?

    Danke für eure Hilfe
    Marc
     
  2. cibi

    cibi Mitglied

    Registriert seit:
    6 Apr. 2005
    Beiträge:
    561
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    Ba-Wü
    Ist cdr_addon_mysql.so überhaupt vorhanden und geladen ?
    (/usr/lib/asterisk)
     
  3. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Dabei geht es nicht danach, was man empfehlen sollte, sondern der Socket ist eindeutig definiert und dient externen Applikationen dazu, sich in die Datenbank einzuhängen. Also kannst und mußt Du genau den Socket verwenden, den Dein MySQL Server generiert.

    Das Modul sollte übrigens auch ohne Änderung der modules.conf automatisch geladen werden.
     
  4. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    im Ordner /usr/lib/asterisk/modules ist leider keine cdr_addon_mysql.so

    Es gibt nur im Ordner /usr/src/asterisk-addons-1.2.1 eine cdr_addon_mysql.c Datei.

    Wie bekomme ich denn die Datei, ich habe eigentlich alle Schritte im Asteriskkurs getan.
     
  5. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Wahrscheinlich hast Du die DEVEL-Bibliotheken für MySQL nicht installiert, deshalb wurde die cdr_addon_mysql.c bei Deinem make gar nicht kompiliert. Schau nochmal in die erste Lektion im Kurs, da hab ich damals was zu dem Thema nachgetragen !
     
  6. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    also das libmysqlclient12 Paket ist installiert.
    Ich kann aber keinen Eintrag von libmysqlclient12-dev finden.
    Gibt es nicht im Paketverwalter.

    Wenn ich apt-get install libmysqlclient12-dev probiere bekomme ich folgende Fehlermeldung:

    Package libmysqlclient12-dev is not available, but is referred to by another package.
    This may mean thet the package is missing, has been obsoleted, or is only available from another source
    E: Package libmysqlclient12-dev has no installation candidate

    Ich habe schon versucht auf der Debianseite das Paket zum downloaden zu finden aber den Download scheint debian wohl nicht mehr anzubieten weil die Seite nicht mehr existiert.
    http://packages.debian.org/testing/libdevel/libmysqlclient12-dev

    Ich habe mittlerweile mit den Repositories im Synaptic Package Manager gespielt aber es wird immer noch nicht gefunden, immer wieder selbe Fehlermeldung wie oben.
    Weiß vielleicht wer wo man es downloaden könnte ?
     
  7. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Probier doch mal ohne eine Nummer dahinter. Dann solltest Du eine solche Ausgabe bekommen und sehen, welche Pakete es gibt (im Beispiel 10 und 12)

    Code:
    vs4509:~# apt-get install libmysqlclient-dev
    Reading Package Lists... Done
    Building Dependency Tree... Done
    Package libmysqlclient-dev is a virtual package provided by:
      libmysqlclient12-dev 4.0.24-10sarge1
      libmysqlclient10-dev 3.23.56-3
    You should explicitly select one to install.
    E: Package libmysqlclient-dev has no installation candidate
    
     
  8. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    apt-get install libmysqlclient10-dev

    edit:

    oh, betateilchen war schon schneller
     
  9. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    apt-get install libmysqlclient10-dev ist auch installiert und bei
    apt-get install libmysqlclient-dev wird auch die 10ner Version als neuste erkannt.

    Warum braucht man nur dieses verdammte libmysqlclient12-dev Paket, rrrrr
    Warum hat Debian nur seine Downloadsite nicht verfügbar, rrrr

    Vielleicht kann mir ja jemand dieses file zusenden, wenn das überhaupt was bringt wenn ich das file einfach reinkopiere !
     
  10. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
  11. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Wenn dieses Paket aber auf Deinem Rechner vorhanden ist, dann solltest Du die mysql-addons auch kompilieren können.

    Geh doch nochmal in /usr/src/asterisk-addons und mach dort mal

    Code:
    make clear && make
    
    und achte bei den Bildschirmausgaben auf Fehlermeldungen. Vielleicht meckert er ja ganz was anderes an und wir suchen hier seit Stunden an der völlig falschen Stelle.
     
  12. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    das Problem mit dem fehlenden Paket war:
    ich hatte nicht all zu viele Paketsources für den Download von updates eingestellt.
    Habe also dann mit apt-setup einen deutschen ftp.debian Server hinzugefügt wo es das Paket dann auch gab.
    Zu guter letzt habe ich dann noch einmal das MySQL-Paket neu gemacht und alles neu konfiguriert und bekomme jetzt einen neuen Fehler in der CLI.

    asterisk*CLI> reload
    == MySQL RealTime reloaded.
    Jan 26 23:55:40 WARNING[2188]: cdr.c:443 ast_cdr_free: CDR on channel 'SIP/11-9f9b' not posted
    Jan 26 23:55:40 WARNING[2188]: cdr.c:445 ast_cdr_free: CDR on channel 'SIP/11-9f9b' lacks end
    Jan 26 23:55:58 WARNING[2195]: cdr.c:443 ast_cdr_free: CDR on channel 'SIP/12-6294' not posted
    Jan 26 23:55:58 WARNING[2195]: cdr.c:445 ast_cdr_free: CDR on channel 'SIP/12-6294' lacks end
    asterisk*CLI>

    Das hat doch bestimmt was mit der NoCDR()-Option in der extension.conf

    [local]
    exten => _1X,1,NoCDR() zu tun, oder ???

    weitere Einstellungen sind:
    cdr_mysql.conf
    [global]
    hostname=localhost
    dbname=asteriskcdrdb
    table=cdr
    password=password
    user=asteriskcdruser
    port=3306
    sock=/var/run/mysqld/mysqld.sock

    res_mysql.conf
    [general]
    dbhost=127.0.0.1
    dbname=asteriskcdrdb
    dbuser=asteriskcdruser
    dbpass=password
    dbport=3306
    dbsock=/var/run/mysqld/mysqld.sock

    ansonsten habe ich die Datenbank so angelegt wie ganz oben beschrieben.

    Könnt ihr mir da vielleicht helfen.

    Danke
    Marc
     
  13. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    NoCDR() sorgt dafür, daß keine EInträge in die Tabelle geschrieben werden. Und die 2 von Dir zitierten Meldungen sind die Bestätigung dafür, daß dieses Nichtschreiben erfolgt ist.
     
  14. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    also muss ich diese Zeile NoCDR().. wohl auskommentieren, oder liege ich da falsch ?
     
  15. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    habe mittlerweile nach meinem Testrechner auch auf meinem vServer das mysql zum laufen gebracht und bin sehr zufrieden.

    Nur eine kleine Frage hätte ich dann doch noch.

    Ich würde auch gerne interne Gespräche auflisten aber das geht ja nicht wenn ich in der extensions.conf

    [local]
    exten => _3X,1,NoCDR()

    verwende. Wenn ich es auskommentiere dann sind keine internen Gespräche mehr möglich.

    Gibt es da überhaupt eine Möglichkeit das man auch interne Gespräche in der Datenbank auflisten kann ?
    Wenn es keine Möglichkeit dafür gibt, gibt es dann zufällig irgend eine Auflistungsmöglichkeit im .csv-Format o.ä. ?
    Weil wenn die CDR-Datenbank eingebunden ist werden ja in den csv-Dateien keine Calls außer Mailboxaufrufe und Echotests mehr aufgelistet.

    Danke für eure bisherige Hilfe
    Marc
     
  16. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Wenn Du das nur auskommentierst, mußt Du daran denken, in der nächsten Zeile des Contexts die Priority 1 zu setzen - eine Abarbeitung in einem Context darf nicht mit "n" beginnen :!:
     
  17. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    danke für den Tipp mit der Priorität, funktioniert.

    Desweiteren ist mir aufgefallen das ich beim reload der CLI immer folgenden Fehler bekomme:

    vs*CLI> reload
    Jan 31 20:31:09 ERROR[28231]: res_config_mysql.c:615 mysql_reconnect: MySQL RealTime: Failed to connect database server on . Check debug for more info.
    Jan 31 20:31:09 WARNING[28231]: res_config_mysql.c:495 reload: MySQL RealTime: Couldn't establish connection. Check debug.
    == MySQL RealTime reloaded.
    vs*CLI>

    Es funktioniert aber alles, alle Gespräche werden in der Datenbank aufgelistet.
    Die Datei res_mysql.conf habe ich noch nicht ins Verzeichnis /etc/asterisk kopiert bzw editiert. Dieses habe ich schon auf meinem Testrechner gemacht und dabei weitere Fehlermeldungen bekommen bzw. es soweit gebracht das der Asterisk sich beim CLI>reload einfach disconnected.

    Kennt ihr dafür eine Lösung oder soll ich es einfach so laufen lassen ?

    Danke
    Marc
     
  18. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Diese Meldungen kannst Du getrost ignorieren. Die haben mit CDR nix zu tun, sondern beziehen sich auf eine mögliche datenbankbasierte Asterisk-Konfiguration.

    Da Du das noch nicht eingerichtet hast, können natürlich auch die entsprechenden Daten nicht gefunden werden.
     
  19. chocoa

    chocoa Neuer User

    Registriert seit:
    3 März 2005
    Beiträge:
    34
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    du meinst wohl diese Datein habe was damit zu tun wenn man den dialplan usw. dem Asterisk via einer Datenbank übergibt, also nicht in den .conf-Datein konfiguriert ?
     
  20. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Ja, genau das meine ich.