Table of Contents
Insert apache log summaries into mysql database
Synopsis
I wrote this tool to get loadtimes over the course of a day from apachelogs into a SQL database for reporting, graphing and further analysis.
Uses awk, and mysqlimport for maximum performance performance: 600.000 lines with stats on 28 separate urls imported in 40 seconds on 1 cpu virtual machine (X5590)
Compability
Requirements
Apache
Requires custom logformat as specified here note: this was created for java, hence the JSESSIONID, if you have a session id as a cookiefield replace JSESSIONID with your cookie field.
- httpd.conf
LogFormat "%t %v %h %{JSESSIONID}C %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %>s %D %b \"%{Referer}i\" \"%{User-Agent}i\"" timelog
MySQL
Requires a destination mysql table
- create_database.sql
CREATE TABLE IF NOT EXISTS tablename ( datetime datetime NOT NULL, hostname VARCHAR(32) NOT NULL, url VARCHAR(200) NOT NULL, avgsize FLOAT NOT NULL, avgtime FLOAT NOT NULL, hits INT(11) NOT NULL, PRIMARY KEY (datetime,hostname,url) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Syntax
$path/apache2mysql.sh [debug] <listfile> <logfile> [logfile] debug: specify for verbose output listfile: list of urls to monitor see example here logfile: path to apachelog
SQL Examples
get statistics averaged by day instead of hour.
- dayavg.sql
SELECT DATE(datetime) AS DATE,url,avg(avgsize) AS avgsize,avg(avgtime) AS avgtime, SUM(hits) AS hits FROM front GROUP BY DATE,url;
Download
Latest version 1.0 apache2mysql.sh
Changelog
1.0
o Initial public release