Query Apache logfiles via SQL
asql is a simple console shell which allows you to run SQL queries against an Apache logfile, something that can be very useful - especially at getting information which is not easily available via static logfile analysers.
Download asql
The links below should allow you to download the code in your preferred form:
In terms of requirements you will need only the Perl modules for working with SQLite database, and the Term::Readline module. Upon a Debian system you may install both via:
apt-get install libdbd-sqlite3-perl libterm-readline-gnu-perl
Usage Overview
Once installed, either via the package or via the source download, please start the shell by typing "asql".
Once the shell starts you have several commands available to you, enter help for a complete list. The three most commonly used commands would be:
- load
This will load an Apache logfile into the temporary database which is created at startup. Single files, or globs are accepted so you may run something like this:
load /var/log/apache2/acces*
To save time parsing the input files more than once you may saving the resulting database with save and later restore it.
- select
This allows you to run an actual query.
- show
This shows the table structure the logfile was parsed into.
Sample session
The following sample session provides a demonstration of typical usage of the shell, it demonstrates the use of the alias command which may be used to create persistent aliases:
asql v0.6 - type 'help' for help.
asql> load /home/skx/hg/engaging/logs/access.log
Loading: /home/skx/hg/engaging/logs/access.log
sasql> select COUNT(id) FROM logs
46
asql> alias hits SELECT COUNT(id) FROM logs
ALIAS hits SELECT COUNT(id) FROM logs
asql> alias ips SELECT DISTINCT(source) FROM logs;
ALIAS ips SELECT DISTINCT(source) FROM logs;
asql> hits
46
asql> alias
ALIAS hits SELECT COUNT(id) FROM logs
ALIAS ips SELECT DISTINCT(source) FROM logs;
(User-input is in bold for emphasis)
More examples may be found in the included README.
|