mod_authn_dbdの場合と同様にOSはubuntu serverで、MySQLはRDSのインスタンスを使用しました。
MySQLの設定
RDSのインスタンスにてログ保存用のデータベースを作成しておきます。create database logs; create user apache identified by 'パスワード'; grant all on logs .* to apache;
mod_log_sqlのインストール
ubuntuのapt-getでインストールされるバージョンは古いので(確か1.10?)、ソースから1.99をインストールします。まずapt-getでapxs2をインストールします。sudo apt-get install apache2-prefork-devmod_log_sql をインストールします。ソースとパッチをダウンロードし、makeしてインストールします。
$ wget http://www.outoforder.cc/downloads/mod_log_sql/mod_log_sql-1.99.tar.gz $ tar -xzvf mod_log_sql-1.99.tar.gz $ cd mod_log_sql-1.99 $ wget http://www.outoforder.cc/downloads/mod_log_sql/mod_log_sql-1.99.diff $ patch -p0 < mod_log_sql-1.99.diff $ wget http://www.outoforder.cc/downloads/mod_log_sql/mod_log_sql-1.99-2.diff $ patch -p0 < mod_log_sql-1.99-2.diff $ ./configure --with-apxs=/usr/bin/apxs2 $ make $ sudo make install
以下の内容で/etc/apache2/mods-available/log_sql.loadを作成します。
LoadModule log_sql_module /usr/lib/apache2/modules/mod_log_sql.soモジュールをロードするよう設定します。
LoadModule log_sql_mysql_module /usr/lib/apache2/modules/mod_log_sql_mysql.so
$ sudo a2enmod log_sql
ログ出力の設定
apacheの設定にて以下の記述を追加します。この設定では、access_logテーブルにデータを保存します。テーブルが存在しない場合には初回のアクセスログ記録時に作成されます。LogSQLLoginInfo mysql://apache:パスワード@RDSのエンドポイント/logsLogSQLTransferLogFormatでログ出力対象の項目を指定しています。詳細はこちらのドキュメントにあります。パフォーマンスへの影響が気になるようであれば、不要な項目は取得しない方がよいかもしれません。
LogSQLCreateTables on
LogSQLTransferLogFormat AbHhmRSsTUuv
LogSQLTransferLogTable access_log
LogSQLDBParam port 3306
LogSQLMachineID web1
また、複数のWebサーバからログを保存する場合には、LogSQLMachineIDにてマシンごとのIDを指定することができます。
この設定で作成されるaccess_logテーブルは以下のようになります。
Field | Type | Null | Key | Default |
---|---|---|---|---|
id | char(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 | char(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 |
これら以外にもCookieやHTTPヘッダを記録することもできるようです。
ファイルに保存したアクセスログを取り込む手間がないはよいのですが、アクセスの都度、DBにアクセスが発生するので、パフォーマンスが求められるようなサイトで使用するのは難しいかもしれません。全くチューニングしない状態で、apache benchで簡単に測定しただけですが、実際、mod_log_sqlを使うとスループットがかなり低下しました。
0 件のコメント:
コメントを投稿