Queue-Log in MySQL importieren

Leider kann Asterisk derzeit das Queue-Log noch nicht direkt in eine SQL-Datenbank-Tabelle schreiben. Daß die Daten in einer SQL-Datenbank liegen, ist aber für alle bekannten Statistik-Tools eine Grundvoraussetzung. Zu diesem Zweck existieren verschiedene Skripte[73] (meist in Perl) bzw. werden bei den Tools mitgeliefert. Sie alle gehen den im unten angefügten Skript beschriebenen Weg, die Datei queue_log durch eine Named-Pipe (FIFO) zu ersetzen. Das Skript öffnet die FIFO zum Lesen, und sobald Asterisk eine Log-Meldung hineinschreibt, wird diese in die Datenbank eingetragen.

[Warnung]Warnung

Diese Methode wird vermutlich in 99 % aller Fälle problemlos funktionieren. Allerdings besteht die Gefahr, daß das Skript, falls es aus irgendwelchen Gründen nicht vor Asterisk gestartet sein sollte oder vorzeitig beendet wird, nicht mehr aus der Named-Pipe liest und Asterisk beim Versuch zu Schreiben ein SIGPIPE-Signal erhält, was Asterisk zum Absturz bringen würde!

Da aber ohne Unterstützung durch Asterisk keine wirkliche Alternative besteht, soll hier der theoretischen Gefahr zum Trotz ein Perl-Skript von William Lloyd den Ansatz beschreiben[74]:

#!/usr/bin/perl -w
#
# wlloyd at slap.net

# The asterisk version indpendant way to get queue stats into Mysql,  
Postgres
# or whatever is supported by Perl DBI

# It's all about named pipes

# to setup this software
# stop asterisk
# rm /var/log/asterisk/queue_log
# mkfifo /var/log/asterisk/queue_log

# make sure permissions are setup
# chmod 777 /var/log/asterisk/queue_log

# run this program as root or under another user as you see fit.
# should start BEFORE asterisk.  Add to /etc/rc.d/rc.local or whatever

# restart asterisk

# requires a DB table like the following..
# CREATE TABLE csr_queue (
#  qname varchar(30) default NULL,
#  agent varchar(30) default NULL,
#  action text,
#  info1 text,
#  info2 text,
#  info3 text,
#  timestamp int(11) NOT NULL default '0',
#  id tinytext NOT NULL
#) TYPE=MyISAM;

use DBI;
use IO::File;

my $opt_debug = 0;

# if you want postgres change this to "Pg"
my $db_type = "mysql";
my $db_host = "127.0.0.1";
my $db_user_name = 'username';
my $db_password = 'password';
my $db_database = 'asteriskstat';

my $dbh = DBI->connect("DBI:$db_type:dbname=$db_database;host= 
$db_host;", $db_user_name, $db_password);

open(FIFO, "< /var/log/asterisk/queue_log")        or die "Can't open  
queue_log : $!\n";

while (1) {

     $message = <FIFO>;
     next unless defined $message;   # interrupted or nothing logged
     chomp $message;

     # remove chars that will cause DB problems
     $message =~ s/\"\'//g;

     @data = split(/\|/,$message);

     # these messages are almost useless for my purposes
     next if ($data[4] eq "QUEUESTART" );
     next if ($data[4] eq "CONFIGRELOAD" );

     if (!defined($data[5])) {
       $data[5] = '';
     }
     if (!defined($data[6])) {
       $data[6] = '';
     }
     if (!defined($data[7])) {
       $data[7] = '';
     }

     my $sql = "INSERT INTO csr_queue (timestamp, id, qname, agent,  
action, info1, info2, info3) VALUES ('$data[0]', '$data[1]', '$data 
[2]', '$data[3]', '$data[4]', '$data[5]', '$data[6]', '$data[7]')";

     print "$sql \n\n" if ($opt_debug);

     $dbh->do($sql);

# if you want an actual logfile you might want to uncomment this
#        if ( open(LOG, ">> /var/log/asterisk/queue_log_real") ) {
#            print LOG "$message\n";
#            close(LOG);
#        } else {
#            warn "Couldn't log to /var/log/asterisk_queue_log: $!\n";
#        }
#
}

$dbh->disconnect();

exit 0;

Bei QueueMetrics (kostenlose Demo-Version) wird ebenfalls ein Perl-Skript queueLoader.pl mitgeliefert (siehe Warnung oben!).



[74] wlloyd at slap.net, veröffentlicht auf der Digium-Mailingliste asterisk-users, siehe: http://lists.digium.com/pipermail/asterisk-users/2005-July/109892.html


$Revision:473 $

Beta-Version!

2.0 Entwickler-Version des Asterisk Buches. Die 1.0 stabile Version ist natürlich noch online. Die 2.0er Version enthält viele Neuerungen, ist aber noch nicht 100% fehlerfrei. Im Zweifelsfall bitte auf die 1.0er Version gehen.

Bitte melden Sie Fehler und Feedback zur neuen 2.0er Version per E-Mail an den Autor.

Asterisk-Tag.org 2008

Auf der Asterisk-Tag.org Webseite finden Sie die Folien und Videos der Vorträge.

Werbung