adminstoriesmitapacheinmysqlloggen

no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


adminstoriesmitapacheinmysqlloggen [20120903 05:58] (aktuell) – angelegt Dirk Deimeke
Zeile 1: Zeile 1:
 +====== 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.
 +
 +<code sql>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';</code>
 +In ''/etc/apache2/sites-available'' erstellen wir dann eine Datei fuer die globale Konfiguration, bei uns ''000global'':
 +
 +<code apache>LogSQLLoginInfo mysql://apache:PASSWORD@localhost/apache
 +LogSQLCreateTables on
 +LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock
 +LogSQLTransferLogFormat IAbPcMfRhluTrmHtUapzqQsSV</code>
 +
 +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:
 +
 +<code bash>a2ensite 000global # Aktivierung der globalen Konfiguration
 +apache2ctl graceful # Pruefen der Konfiguration und Neustart des Apache</code>
 +
 +Damit ist das Logging in die Datenbank abgeschlossen, um die Downloads auszuwerten, genügen drei einfache Schritte:
 +
 +<code sql>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;</code>
 +
 +Erzeugt eine Tabelle, in die wir alle Dateien, die uns interessieren eintragen.
 +
 +<code bash>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</code>
 +
 +Liest alle Dateien und deren Laengen aus dem Filesystem und schreibt das in die Datenbank. 
 +
 +<code sql>SELECT e.kurzname,sum(n.bytes_sent)/e.laenge 
 +FROM deimhart_episoden e, deimhart_net n
 +WHERE e.langname=n.request_file</code>
 +
 +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]]
  • adminstoriesmitapacheinmysqlloggen.txt
  • Zuletzt geändert: 20120903 05:58
  • von Dirk Deimeke