Log Apache2 access log into a MySQL database on Debian Lenny
Dieser Artikel beschreibt wie man Apache sein Access Log in eine MySQL Datenbank schreiben lässt.
Man benötigt einen installierten und konfigurierten Apache2 Webserver sowie MySQL Datenbankserver.
Installation:
Auf dem Webserver:
aptitude install libapache2-mod-log-sql-mysql a2enmod unique_id
Auf dem Datenbankserver:
Erstelle eine Datenbank “apachelogs” und einen entsprechenden Benutzer für diese Datenbank.
Konfiguration des virtuellen Hosts:
Ersetze “PASSWORD” und “DATABASE_SERVER” mit deinen eigenen Daten.
LogSQLLoginInfo mysql://apachelogs:PASSWORD@DATABASE_SERVER/apachelogs LogSQLCreateTables on LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock LogSQLTransferLogFormat IAbPcMfRhluTrmHtUapzqQsSV <virtualhost www.testsrv.local:80> ServerName www.testsrv.local ServerAdmin servermaster@testsrv.local DocumentRoot /var/www/vhost1/htdocs ErrorLog /var/www/vhost1/logs/error.log CustomLog /var/www/vhost1/logs/access.log common LogSQLTransferLogTable vhost1_access_log </virtualhost>
/etc/init.d/apache2 reload
mod-log-sql-mysql wird nun eine Tabelle “vhost1_access_log” erstellen und die Access Log Einträge dort speichern.
Probleme:
Es können verschiedene Probleme im Apache Error log auftauchen nach der Installation des Moduls:
1. “No such file or directory: attempted append of local preserve file ‘/etc/apache2/logs/mod_log_sql-preserve’ but failed.”
Man muss das Verzeichnis “/etc/apache2/logs” manuell anlegen oder einen entsprechenden Symlink auf “/var/log/apache2″.
2. “failed to create table: score_board”
Es gibt ein Problem bei der automatischen Erstellung der “scoreboard” Tabelle, sie muss per Hand angelegt werden:
CREATE TABLE IF NOT EXISTS `scoreboard` ( `id` int(14) NOT NULL auto_increment, `vhost` varchar(50) NOT NULL default '', `bytes_sent` int(14) NOT NULL default '0', `count_hosts` int(12) NOT NULL default '0', `count_visits` int(12) NOT NULL default '0', `count_status_200` int(12) NOT NULL default '0', `count_status_404` int(12) NOT NULL default '0', `count_impressions` int(18) NOT NULL default '0', `last_run` int(14) NOT NULL default '0', `month` int(4) NOT NULL default '0', `year` int(4) NOT NULL default '0', `domain` varchar(50) NOT NULL default '', `bytes_receive` int(14) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `vhost` (`vhost`,`month`,`year`,`domain`) ) TYPE=MyISAM;
Danke an Alexandre Bulté für die Lösung !
Links:
http://blog.bulte.net/2008/04/apache-modlogsql-problem-with.html
http://www.outoforder.cc/projects/apache/mod_log_sql/
http://www.howtoforge.com/apache2-logging-to-a-mysql-database-with-mod_log_sql-on-debian-etch
Deploy Adobe Coldfusion 8 on Tomcat 6 in a virtual host environment Secure Apache 2 with mod-security 2 on Debian Lenny


Thank you for this straight forward installation
CREATE TABLE IF NOT EXISTS `scoreboard` (
I think the table name is `score_board`
CREATE TABLE IF NOT EXISTS `score_board` (
Carsten
[...] geschrieben werden. Die Fehlerlösung werde ich morgen vorstellen. Solange kann man die Fehlerlösung am Ende dieses Artikels finden.InstallationAuf meinem vServer läuft Ubuntu 9.04. Dort kann das Modul ganz bequem aus [...]
Wofür ist die Tabelle scoreboard gedacht? Um Traffic, Zugriffe und Fehlerseiten zu loggen? Weißt du zufällig, ob man pro vhost einen eigenen Scoreboard-Eintrag erzeugen kann? Bei mir steht derzeit nur default-domain.tld in der vhost Spalte.
P.S.: Danke für die Fehlerlösung
Hi,
also erstens muss die Tabelle bei mir “scoreboard” heißen und nicht “score_board” aber das könnte aber vielleicht auf einem anderen System anders sein. (Nicht Debian oder Ubuntu)
Die scoreboard ist so eine Art Zusammenfassung bzw. Übersicht. Den Wert der vhost-Spalte sowie den der Domain-Spalte kannst du mit folgenden Parametern beeinflussen:
LogSQLScoreDomain foobar.de # (domain)
LogSQLScoreSubdomain www # (vhost)
Klingt etwas komisch ist aber so
Schöner Artikel übrigens, viel Glück damit.
Für mich war das loggen in die Datenbank jedoch nicht schnell genug deswegen setze ich das nicht mehr ein.
Ich wollte es aber auf einer großeren Seite, welche auf 4-6 Apache Server lief, einsetzen.
[...] [via Sebastian] [...]