====== Mit Apache in MySQL loggen ======
* Urspruenglicher Autor: Dirk Deimeke
* Urspruengliches Datum: 23.09.2011
Der Apache-Webserver erzeugt im Standard Logdateien, was auch gut ist. Manchmal braucht man für Auswertungen die Daten allerdings in einer Datenbank. Wie beispielsweise bei der Analyse der Downloadzahlen eines Podcasts. Genau fuer diesen Zweck wurde das Modul [[http://www.outoforder.cc/projects/httpd/mod_log_sql/|mod_log_sql]] geschrieben. Hier geht es jetzt um die Einrichtung und die Abfrage der Daten.
Auf Debian basierten Systemen wird ''mod_log_sql'' mittels ''apt-get install libapache2-mod-log-sql-mysql'' installiert. Bei uns soll es so sein, dass die Daten in der Datenbank **apache** landen und dort soll es pro Domain eine Tabelle geben.
CREATE USER 'apache'@'localhost' IDENTIFIED BY '***';
GRANT USAGE ON * . * TO 'apache'@'localhost' IDENTIFIED BY '***' ;
CREATE DATABASE IF NOT EXISTS `apache` ;
GRANT ALL PRIVILEGES ON `apache` . * TO 'apache'@'localhost';
In ''/etc/apache2/sites-available'' erstellen wir dann eine Datei fuer die globale Konfiguration, bei uns ''000global'':
LogSQLLoginInfo mysql://apache:PASSWORD@localhost/apache
LogSQLCreateTables on
LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock
LogSQLTransferLogFormat IAbPcMfRhluTrmHtUapzqQsSV
Wichtig, diese Konfiguration muss ausserhalb einer VirtualHost-Directive liegen.
Fuer den VirtualHost richten wir jetzt innerhalb der vHost-Konfiguration den Namen der Tabelle mit ''LogSQLTransferLogTable deimhart_net'' ein. Da wir nur den Download von mp3- und ogg-Dateien zaehlen wollen, schreiben wir noch ''LogSQLRequestAccept .mp3 .ogg'' dazu (wenn man alles in die Datenbank protokollieren moechte, kann das entfallen). Die Tabellen werden automatisch erstellt, siehe ''LogSQLCreateTables on''.
Jetzt aktivieren wir alles noch mit folgenden Befehlen auf der Kommandozeile:
a2ensite 000global # Aktivierung der globalen Konfiguration
apache2ctl graceful # Pruefen der Konfiguration und Neustart des Apache
Damit ist das Logging in die Datenbank abgeschlossen, um die Downloads auszuwerten, genügen drei einfache Schritte:
CREATE TABLE deimhart_episoden (
kurzname char(30) NOT NULL,
langname char(90) NOT NULL,
laenge bigint(20) unsigned NOT NULL,
PRIMARY KEY (`kurzname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Erzeugt eine Tabelle, in die wir alle Dateien, die uns interessieren eintragen.
echo "truncate table deimhart_episoden;" > deimhart_episoden.sql
ls -l /srv/www/deimhart.net/uploads/*.{mp3,ogg} | awk '{print $5, $8}' |
while read laenge langname
do
echo "insert into deimhart_episoden values ('$(basename ${langname})','${langname}',${laenge});"
done >> deimhart_episoden.sql
mysql apache < deimhart_episoden.sql
Liest alle Dateien und deren Laengen aus dem Filesystem und schreibt das in die Datenbank.
SELECT e.kurzname,sum(n.bytes_sent)/e.laenge
FROM deimhart_episoden e, deimhart_net n
WHERE e.langname=n.request_file
Obige Abfrage gibt abschliessend die Anzahl der Downloads aus. Berechnet wird sie durch die Summe der übertragenen Bytes pro Episode geteilt durch die Laenge der entsprechenden Episode.
[[adminstoriesartikel|Zurück zur Uebersicht]]