6. Log-Datei

Ereignisse, die auf den Warteschlangen auftreten, werden im Queue-Log, normalerweise /var/log/asterisk/queue_log detailliert festgehalten (natürlich werden auch Einträge im CDR-Log gemacht). Im queue_log steht ein Eintrag pro Zeile im Format:

Timestamp|Anruf-ID|Schlange|Kanal|Event|Param1[|Param2[|Param3]]
Timestamp
Ist die Unix-Zeit, zu der der Event aufgetreten ist.
Anruf-ID
Ist die einmalige ID des Anrufs (alphanumerisch).
Schlange
Ist der Name der Warteschlange, z.B. support. Kann auch NULL sein.
Kanal
Ist der Name des überbrückten Kanals, z.B. Agent/1001. Kann auch NULL sein.
Event
Ist der Name des aufgetretenen Ereignisses (s.u.). Abhängig vom Event sind Param1, Param2 und Param3 angegeben.

Die möglichen Ereignisse sind u.a. (siehe auch doc/queuelog.txt):

ABANDON
Anrufer hat seine Position in der Schlange durch Auflegen aufgegeben. Parameter: Position, Einstiegsposition, Wartezeit.
AGENTDUMP
Agent hat den Anrufer während der Ankündigung der Schlange abgewiesen.
AGENTLOGIN
Agent hat sich eingeloggt. Parameter: Kanal (z.B. SIP/127.0.0.1-0181ac00).
AGENTCALLBACKLOGIN
Callback-Agent hat sich eingeloggt. Parameter: Login-Extension[@Context].
AGENTLOGOFF
Agent hat sich ausgeloggt. Parameter: Kanal, Login-Dauer.
AGENTCALLBACKLOGOFF
Agent hat sich (/wurde) ausgeloggt. Parameter: Login-Extension[@Context], Login-Dauer, Grund (z.B. Autologoff).
COMPLETEAGENT
Gespräch zwischen Anrufer und Agent wurde vom Agenten beendet. Parameter: Wartezeit, Anruf-Dauer, Einstiegsposition.
COMPLETECALLER
Gespräch zwischen Anrufer und Agent wurde vom Anrufer beendet. Parameter: Wartezeit, Anruf-Dauer, Einstiegsposition.
CONFIGRELOAD
Konfiguration wurde neu eingelesen (z.B. durch asterisk -rx "reload").
CONNECT
Anrufer wurde zu einem Agenten durchgestellt. Parameter: Wartezeit.
ENTERQUEUE
Anrufer wurde in die Schlange aufgenommen. Parameter URL (falls verfügbar), Caller-ID.
EXITEMPTY
Anrufer wurd aus der Schlange geworfen, weil keine Agenten verfügbar waren[121]. Parameter: Position zum Zeitpunkt des Verlassens der Schlange, ursprüngliche Position beim Eintritt, Wartezeit.
EXITWITHKEY
Anrufer hat die Schlange durch Drücken einer Taste verlassen. Parameter: Taste, Position.
EXITWITHTIMEOUT
Anrufer war zu lange in der Schlange, und der Timeout ist abgelaufen. Parameter: Position.
QUEUESTART
Das Warteschlangensystem wurde gestartet. Dabei haben die Felder Anruf-ID, Schlange und Kanal den Wert NULL.
RINGNOANSWER
Ein verfügbarer Agent wurde angeklingelt, hat aber nicht abgenommen (Timeout). Parameter: Klingeldauer (in Millisekunden).
SYSCOMPAT
Agent hat Anruf angenommen, aber die Kanäle waren nicht kompatibel, und der Anruf wurde beendet.
TRANSFER
Anrufer wurde auf eine andere Extension umgeleitet. Parameter: Extension, Context.

Kommerzielle Log-Analyse- und Echtzeitüberwachungssysteme sind QueueMetrics[122] oder Easy PABX[123]. Siehe auch QueueLog().

Asterisk kann derzeit das Queue-Log noch nicht direkt in eine SQL-Tabelle schreiben. Wie man das trotzdem erreichen kann, wird auf http://www.voip-info.org/wiki/view/Asterisk+queue_log+on+MySQL beschrieben. Eine Möglichkeit ist, die Datei queue_log durch eine Named-Pipe zu ersetzen und dann z.B. mit einem Perl-Skript die Einträge in eine Datenbank zu schreiben. Hier ein Perl-Skript von William Lloyd[124]:

#!/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.



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


Version 1.2, November 2002

Neue Version verfügbar

Sie betrachten gerade die alte Version des Buches (Version 1.0). Wir empfehlen Ihnen für Asterisk 1.4 und 1.6 die neue Version des Buches.

Asterisk-Tag 2008

Lernen Sie Mark Spencer (den Erfinder von Asterisk) kennen! Viele Vorträge, Case-Studies und Workshops rund um das Thema VoIP. Asterisk-Tag.org

Das gedruckte Buch