[ start | index | login or register ]
mainpage > administration > Apache Logs in MySQL Datenbank schreiben

Apache Logs in MySQL Datenbank schreiben

Created by mschulz. Last edited by mschulz, 275 days ago. Viewed 189 times. #13
[diff] [history] [edit] [rdf]
labels
attachments
logs.jpg (219518)

Apache Logs in MySQL Datenbank schreiben

Konfiguration der MySQL Datenbank

Zuerst erstellen wir eine mysql Datenbank mit den Namen logs.

mysql> CREATE DATABASE logs CHARACTER SET utf8 COLLATE utf8_general_ci;

Dann erstellen wir uns in dieser Datenbank eine Tabelle access.

mysql> USE logs;
mysql> CREATE TABLE access (
        date    datetime     not null,
        host        varchar(255) not null,
        method  char(4)      not null,
        url        varchar(255) not null,
        auth        varchar(50),
        browser varchar(50),
        referer varchar(255),
        status  smallint(3)  not null,
        bytes        int(8)       default 0
  );

Als letzten Schritt erstellen wir den User www-data mit den Rechten INSERT auf der Datenbank logs.

mysql> GRANT INSERT ON `logs` . * TO 'www-data'@'localhost';
mysql> FLUSH PRIVILEGES;

Konfiguration des Apache

In der Datei /etc/apache2/apache.conf erstellen wir uns ein Logformat und nennen es mysql.

# /etc/apache2/apache.conf
…
LogFormat "\"%{%Y-%m-%d %H:%M:%S}t\" %h \"%r\" %u \"%{User-agent}i\" %{Referer}i %s %b" mysql
...

In der Datei /etc/apache2/sites-available/default definieren wir als CustomLog dieses neu erstellte Logformat, mit dem Pfad zum Perl Programm, was die Logs in die Datenbank schreibt.

<VirtualHost *:80>
	....
	CustomLog "| /home/tux/bin/mysqllog.pl" mysql
	....
</VirtualHost>

Perl Programm was die Logs in die Datenbank schreibt

Nun erstellen wir noch das Perl Programm, was die ApacheLogs in die Datenbank schreibt.

#!/usr/bin/perl
# script: mysqllog.pl

use DBI;

use constant DSN => 'dbi:mysql:logs'; use constant DB_TABLE => 'access'; use constant DB_USER => 'www-data'; use constant DB_PASSWD => '';

$PATTERN = '"([^"]+)" (\S+) "(\S+) (\S+) [^"]+" (\S+) "([^"]+)" (\S+) (\d+) (\S+)';

$db = DBI->connect(DSN,DB_USER,DB_PASSWD) || die DBI->errstr; $sth = $db->prepare("INSERT INTO ${\DB_TABLE} VALUES(?,?,?,?,?,?,?,?,?)") || die $db->errstr;

while (<>) { chomp; my ($date,$host,$method,$url,$user,$browser,$referer,$status,$bytes) = /$PATTERN/o; $user = undef if $user eq '-'; $referer = undef if $referer eq '-'; $browser = undef if $browser eq '-'; $bytes = undef if $bytes eq '-'; $sth->execute($date,$host,$method,$url,$user,$browser,$referer,$status,$bytes); }

$sth->finish; $db->disconnect;

# EOF

Screens

no comments | post comment

Portlet konfigurieren!
Als Administrator anmelden um dieses Portlet zu bearbeiten.

Spielwiese
In der Spielwiese kannst Du deine ersten Schritte mit der SnipSnap Formatierung testen. Für Hinweise zur Formatierung schau Dir die Hilfe an.

SnipSnap Macros & Filter
Hier kann man SnipSnap Macros und SnipSnap Filter herunter laden.

Logged in Users: (0)
… and 3 Guests.


Kalendar

< September 2010 >
SunMonTueWedThuFriSat
1234
567891011
12131415161718
19202122232425
2627282930

Favorieten
>>codebase at tuxnet24
>>wiki at tomedia
>>perlunity
>>cvsaccess-1.01

Sleipnir - Rock für Randgruppen

snipsnap.org | Copyright 2000-2002 Matthias L. Jugel and Stephan J. Schmidt