apacheのログをSQLでselectできる『asql』

Apacheのアクセスログやエラーログを解析するとき、基本的にはawkやgrepを組み合わせて整形する事が多いだろう。
今回は、そんなApacheのログファイルをSQLで解析することが出来るツール『asql』を紹介する。

1.インストール

まずはインストールから。
Debian/Ubuntu系の場合はapt-getで、RHEL系の場合はソースからコンパイルしてインストールする。

Debian/Ubuntu系の場合

sudo apt-get install asql

RHEL系の場合

sudo yum install perl-DBD-SQLite perl-Term-ReadLine-Gnu
wget http://www.steve.org.uk/Software/asql/asql-1.7.tar.gz
tar xvfvz asql-1.7.tar.gz
cd asql
make install

2.ログファイルを読み込む

さて、それでは実際にasqlを使ってログの分析を行ってみよう。
まず、asqlコマンドを実行してasqlのコンソールに入る。

asql

次に、このasqlコンソール上で以下のようにコマンドを実行し、apacheのログファイルを読み込む。

load apacheログファイルのPATH(ワイルドカード指定可能)

Debian/Ubuntu系の場合

load /var/log/apache2/access.*

RHEL系の場合

load /var/log/httpd/access_log*

これで、SQLでapacheのログを抽出することができるようになった。

3.ログの抽出

それでは、実際にログを抽出してみよう。
なお、SQLで抽出するにあたり、SELECT文で抽出する列は以下のようになっている。

asql> show

   The 'logs' table has the following columns:

  id      - ID of the request
  source  - IP, or hostname, which made the request.
  request - The HTTP request
  status  - The HTTP status-code returned
  size    - The size of the response served, in bytes.
  method  - The HTTP method invoked (GET, PUT, POST etc).
  referer - The HTTP referer (sic).
  agent   - The User-Agent which made the request.
  version - The HTTP version used by this client.
  date    - The date and time at which the request was made.
  label   - Any label applied when the logfile was read.
  user    - The remote (authenticated) user, if any.

それでは、試しにSELECT文を実行してみよう。

SELECT source,SUM(size) AS Number FROM logs GROUP BY source ORDER BY Number DESC;
SELECT * FROM logs ;

確かに、SQLでapacheのログファイルから抽出を行う事が出来た。
なお、ログからデータベースに取り込んだファイルを保存する場合は、asqlコンソール内でsaveコマンドを、読み込む場合にはrestoreコマンドを利用する。