mod_log_sqlを使って、Apacheのアクセスログをmysqlに保存する設定をしたときのメモです。

アクセスログを保存するmysqlのストレージエンジンには、前からずっと気になっていたARCHIVEストレージエンジンを使用しました。


■ ARCHIVEストレージエンジンについて

  • ロギングや監査用途に向いている。SELECT、INSERT命令しか使えない
  • INSERTのパフォーマンスはMyISAMの1.5倍、InnoDBの3.5倍
  • データは圧縮して格納(圧縮率70~80%)
  • インデックスは非対応
  • 一般ユーザーの利用率は5%程度

すべて以前行ったセミナーでもらった資料より抜粋です。

■ ログを保存するデータベースを作成

mysqlのインストールは完了しているものとして割愛します。

ただmysqlをソースからビルドしてインストールする場合には、configure時に–with-archive-storage-engineオプションを追加しないとARCHIVEストレージエンジンは使用できません。

現在のMySQLでARCHIVEストレージエンジンが有効かどうかを調べるには以下のようにします。

結果にYESと出ればARCHIVEストレージエンジンを使用できます。

もしNOと出た場合には、–with-archive-storage-engineオプションをつけて再度mysqlをビルドする必要があります。

続いてログ保存用のデータベースを、apachelogsという名前で、ストレージエンジンをARCHIVEで作成します。

/etc/my.cnfに以下のように設定してデフォルトのストレージエンジンをARCHIVEにします。設定後にmysqlを再起動します。

ストレージエンジンの設定方法は他にも色々あります(テーブル作成時に設定とか、alter tableとか)が、ここでは割愛します。

続けてログを保存するデータベースの設定をします。

データベースの作成と同時に、apachelogsのデータベースについて、INSERT文とCREATE文の権限をもったloguserを登録しています(パスワードはpasswd)。

■ mod_log_sqlのインストール

mod_log_sqlのページから最新版をダウンロードします(今回はVersion 1.101)。

apxsとmysqlのパスはお使いの環境に合わせてください。

これで、/usr/local/apache2/module ディレクトリにmod_log_sql.so、mod_log_sql_logio.so、mod_log_sql_mysql.so、mod_log_sql_ssl.soの4つのモジュールができていると思います。

今回はconfigure時にlibmysqlclientがないといったエラーが出たため、最初mod_log_sql_mysqlが作成されませんでした。これについては、MySQLのマニュアルを頼りに、以下のようにしたら解決できました。

■ Apacheの設定をする

httpd.confを編集します。まずはロードモジュールの設定です

LogSQLDBParam socketfile のパスはお使いの環境に合わせてください。

設定が終わったらapacheを再起動します。

以上で設定が全て完了しました。

webページにアクセスしてからapachelogsデータベースののaccess_logテーブルを表示した結果です

ちゃんとaccess_logがデータベースに保存されました。

このあと、パフォーマンスのベンチマークをとったのですが、文が長くなったので次回書きます。

■ 参考URL
http://www.outoforder.cc/projects/apache/mod_log_sql/docs-2.0/?chapter=/
http://www.freewheelburning.com/linux/mod_log_sql.html
http://beausoir.blog100.fc2.com/blog-entry-14.html

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください