April 20, 2004

mod_log_sql でアクセスログを MySQL に書き込む

[ Linux & UNIX ]

もいっちょ 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 によりサーバアクセスの統計が簡単に抽出できます。プログラムから利用しやすいのもメリットの一つですね。

Posted by naoya at April 20, 2004 12:28 AM | トラックバック (0)  b_entry.gif
トラックバック [0件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/988
コメント [0件]
コメントする









名前、アドレスを登録しますか?