もいっちょ Apacheクックブック からのネタ。Apache のアクセスログを(ファイルではなく) MySQL のテーブルに書き込む Apache モジュール mod_log_sql が面白そうだったので使ってみました。いい感じに動いてます。
mysql> desc access_log; +------------------+----------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+----------------------+------+-----+---------+-------+ | id | varchar(19) | YES | | NULL | | | agent | varchar(255) | YES | | NULL | | | bytes_sent | int(10) unsigned | YES | | NULL | | | child_pid | smallint(5) unsigned | YES | | NULL | | | cookie | varchar(255) | YES | | NULL | | | machine_id | varchar(25) | YES | | NULL | | | request_file | varchar(255) | YES | | NULL | | | referer | varchar(255) | YES | | NULL | | | remote_host | varchar(50) | YES | | NULL | | | remote_logname | varchar(50) | YES | | NULL | | | remote_user | varchar(50) | YES | | NULL | | | request_duration | smallint(5) unsigned | YES | | NULL | | | request_line | varchar(255) | YES | | NULL | | | request_method | varchar(10) | YES | | NULL | | | request_protocol | varchar(10) | YES | | NULL | | | request_time | varchar(28) | YES | | NULL | | | request_uri | varchar(255) | YES | | NULL | | | request_args | varchar(255) | YES | | NULL | | | server_port | smallint(5) unsigned | YES | | NULL | | | ssl_cipher | varchar(25) | YES | | NULL | | | ssl_keysize | smallint(5) unsigned | YES | | NULL | | | ssl_maxkeysize | smallint(5) unsigned | YES | | NULL | | | status | smallint(5) unsigned | YES | | NULL | | | time_stamp | int(10) unsigned | YES | | NULL | | | virtual_host | varchar(255) | YES | | NULL | | +------------------+----------------------+------+-----+---------+-------+ 25 rows in set (0.00 sec)
といった具合に、アクセスログの各フィールドごとにカラムが切られているので、
mysql> select status, count(status) from access_log group by status; +--------+---------------+ | status | count(status) | +--------+---------------+ | 200 | 574 | | 304 | 36 | | 404 | 9 | +--------+---------------+ 3 rows in set (0.00 sec)
以上の様に、SQL によりサーバアクセスの統計が簡単に抽出できます。プログラムから利用しやすいのもメリットの一つですね。