Apache, MySQL · 5 min read · Feb 03, 2026
Apache2: Protokollierung in eine MySQL-Datenbank mit mod_log_sql (Debian Etch)
Apache2: Protokollierung in eine MySQL-Datenbank mit mod_log_sql (Debian Etch)
Version 1.0
Autor: Falko Timme
Dieses Handbuch zeigt, wie Sie das Apache2-Zugriffsprotokoll in eine MySQL-Datenbank anstelle einer Datei schreiben können. Um dies zu erreichen, verwende ich das Apache2-Modul mod_log_sql. Ich benutze einen Debian Etch-Server in diesem Tutorial.
Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!
1 Installation von Apache2, MySQL, mod_log_sql
Leider ist libapache2-mod-log-sql-mysql nur als Debian-Paket für Debian Lenny (Testing) und Sid (unstable) verfügbar, nicht jedoch für Etch. Daher werden wir das Paket libapache2-mod-log-sql-mysql aus Lenny installieren. Öffnen Sie dazu /etc/apt/sources.list und fügen Sie die Zeile deb http://ftp2.de.debian.org/debian/ lenny main hinzu; Ihre /etc/apt/sources.list könnte dann so aussehen:
vi /etc/apt/sources.list| deb http://ftp2.de.debian.org/debian/ etch main deb-src http://ftp2.de.debian.org/debian/ etch main deb http://ftp2.de.debian.org/debian/ lenny main deb http://security.debian.org/ etch/updates main contrib deb-src http://security.debian.org/ etch/updates main contrib |
Natürlich (um unser System nicht durcheinander zu bringen) möchten wir Pakete aus Lenny nur installieren, wenn es kein passendes Paket aus Etch gibt - wenn es Pakete aus Etch und Lenny gibt, möchten wir das aus Etch installieren. Dazu geben wir den Paketen aus Etch eine höhere Priorität in /etc/apt/preferences:
vi /etc/apt/preferences| Package: * Pin: release a=etch Pin-Priority: 700 Package: * Pin: release a=lenny Pin-Priority: 650 |
(Die Begriffe etch und lenny beziehen sich auf die entsprechenden Begriffe in /etc/apt/sources.list; wenn Sie dort stable und testing verwenden, müssen Sie auch stable und testing anstelle von etch und lenny in /etc/apt/preferences verwenden.)
Anschließend aktualisieren wir unsere Paketdatenbank:
apt-get updateWenn Sie einen Fehler wie diesen erhalten:
Segmentation faultsts... 96%oder diesen:
E: Dynamic MMap ran out of roomöffnen Sie /etc/apt/apt.conf und fügen Sie eine Zeile für APT::Cache-Limit mit einem sehr hohen Wert hinzu, z.B. so:
vi /etc/apt/apt.conf | APT::Cache-Limit "100000000"; |
Führen Sie dann
apt-get updatenochmals aus und aktualisieren Sie die installierten Pakete:
apt-get upgrade (Wenn Sie Fragen sehen, können Sie die Standardwerte akzeptieren.)
Um Apache2, MySQL und mod_log_sql zu installieren, führen wir aus:
apt-get install apache2 mysql-server mysql-client libapache2-mod-log-sql-mysqlErstellen Sie ein Passwort für den MySQL-Benutzer root (ersetzen Sie yourrootsqlpassword durch das Passwort, das Sie verwenden möchten):
mysqladmin -u root password yourrootsqlpasswordÜberprüfen Sie dann mit
netstat -tap | grep mysqlauf welchen Adressen MySQL lauscht. Wenn die Ausgabe so aussieht:
tcp 0 0 localhost.localdo:mysql *:* LISTEN 2713/mysqldwas bedeutet, dass MySQL nur auf localhost.localdomain lauscht, dann sind Sie mit dem Passwort, das Sie zuvor festgelegt haben, auf der sicheren Seite. Wenn die Ausgabe jedoch so aussieht:
tcp 0 0 *:mysql *:* LISTEN 2713/mysqldsollten Sie auch ein MySQL-Passwort für Ihren Hostnamen festlegen, da sonst jeder auf Ihre Datenbank zugreifen und Daten ändern kann:
mysqladmin -h server1.example.com -u root password yourrootsqlpasswordmod_log_sql wurde automatisch aktiviert, als wir es installiert haben, aber es gibt ein weiteres Modul, das wir aktivieren sollten: mod_uique_id (es ist nicht notwendig, aber ohne es lässt mod_log_sql die id-Spalte in der MySQL-Tabelle für das Zugriffsprotokoll leer). Die id-Spalte enthält die eindeutige Anforderungs-ID, die vom Standard-Apache-Modul mod_unique_id bereitgestellt wird.
a2enmod unique_idLaden Sie Apache neu:
/etc/init.d/apache2 force-reload2 Erstellen eines virtuellen Hosts
Ich werde jetzt einen Standard-Apache-vhost im Verzeichnis /var/www/web1/web erstellen. Zu diesem Zweck werde ich die Standard-Apache-vhost-Konfiguration in /etc/apache2/sites-available/default ändern. Wenn Sie bereits einen vhost haben, für den Sie die MySQL-Protokollierung aktivieren möchten, müssen Sie dieses Tutorial an Ihre Situation anpassen.
Zuerst erstellen wir das Verzeichnis /var/www/web1/web und machen den Apache-Benutzer (www-data) zum Eigentümer dieses Verzeichnisses:
mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web
Dann sichern wir die Standard-Apache-vhost-Konfiguration (/etc/apache2/sites-available/default) und erstellen unsere eigene:
mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/default
| NameVirtualHost * |
Dann laden Sie Apache neu:
/etc/init.d/apache2 reload3 Konfigurieren Sie den virtuellen Host für MySQL-Protokollierung
Die Dokumentation für mod_log_sql finden Sie in der HTML-Datei /usr/share/doc/libapache2-mod-log-sql/manual.html. Sie sollten sie auf Ihren Arbeitsplatz kopieren (z.B. mit WinSCP) und studieren.
Nachdem Sie diese Datei gelesen haben, erstellen wir eine MySQL-Datenbank namens apachelogs, die die Tabellen für unsere Zugriffsprotokolle enthalten wird (sie kann mehrere Tabellen für Zugriffsprotokolle enthalten, z.B. eine für jeden virtuellen Host, den Sie haben). Zusätzlich erstellen wir den MySQL-Benutzer loguser - dieser Benutzer wird später von mod_log_sql verwendet, um sich mit MySQL zu verbinden. loguser wird CREATE- und INSERT-Berechtigungen haben, damit er automatisch Tabellen für die Zugriffsprotokolle erstellen (wenn die Tabellen noch nicht existieren) und Datensätze in diese Tabellen einfügen kann:
mysql -u root -pcreate database apachelogs;grant insert,create on apachelogs. to loguser@localhost identified by ‘loguser_password’;
grant insert,create on apachelogs. to [email protected] identified by ‘loguser_password’;
FLUSH PRIVILEGES;
(Ersetzen Sie loguser_password durch ein Passwort Ihrer Wahl.)
Dann verlassen wir die MySQL-Shell:
quit;Jetzt ändern wir unseren vhost in /etc/apache2/sites-available/default, sodass er wie folgt aussieht:
vi /etc/apache2/sites-available/default| LogSQLLoginInfo mysql://loguser:loguser_password@localhost/apachelogs LogSQLCreateTables on LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock LogSQLTransferLogFormat AbHhmRSsTUuvI NameVirtualHost * |
Die Direktiven LogSQLLoginInfo (die die Anmeldeinformationen zur Datenbank enthält), LogSQLCreateTables (die mod_log_sql anweist, Tabellen zu erstellen, wenn sie nicht existieren), LogSQLDBParam socketfile (die den MySQL-Socket angibt) und LogSQLTransferLogFormat (die angibt, was in der Datenbank protokolliert wird) gehören zur globalen Apache-Konfiguration. Die Direktive LogSQLTransferLogTable gehört zur vhost-Konfiguration - so können Sie unterschiedliche Zugriffsprotokolltabellen für jeden virtuellen Host angeben (z.B. web1_access_log, web2_access_log, web3_access_log usw.).
Die Direktive LogSQLTransferLogFormat wird ausführlicher in der Datei /usr/share/doc/libapache2-mod-log-sql/manual.html erklärt.
Laden Sie danach Apache neu:
/etc/init.d/apache2 reload4 Testen von mod_log_sql
Zugreifen auf einige Seiten von Ihrem vhost in einem Browser und überprüfen Sie anschließend die apachelogs-Datenbank:
mysql -u root -puse apachelogs;
show tables;
Sie sollten jetzt sehen, dass die Tabelle web1_access_log von mod_log_sql erstellt wurde:
mysql> show tables;
+———————-+
| Tables_in_apachelogs |
+———————-+
| web1_access_log |
+———————-+
1 row in set (0.00 sec)
mysql>
Jetzt überprüfen wir, was in dieser Tabelle steht:
select * from web1_access_log;Wenn alles gut gelaufen ist, sollten Sie Zugriffsprotokolle in dieser Tabelle finden:
mysql> select * from web1_access_log;
+———————+———————————————————————————————…
| id | agent …
+———————+———————————————————————————————…
| JpEF8MCoAGQAAFyuEBU | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpPHIMCoAGQAAFyuEBY | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpTj0MCoAGQAAFyuEBc | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
+———————+———————————————————————————————…
3 rows in set (0.00 sec)
mysql>
Geben Sie
quit;ein, um die MySQL-Shell zu verlassen.
5 Links
- Apache: http://httpd.apache.org
- Debian: http://www.debian.org
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.