Apache, MySQL · 1 min read · Feb 03, 2026

Apache2: MySQLデータベースへのログ記録 (mod_log_sql) (Debian Etch)

Apache2: MySQLデータベースへのログ記録 (mod_log_sql) (Debian Etch)

Version 1.0
Author: Falko Timme

このガイドでは、Apache2のアクセスログをファイルの代わりにMySQLデータベースに書き込む方法を示します。これを実現するために、Apache2モジュールmod_log_sqlを使用します。このチュートリアルでは、Debian Etchサーバーを使用しています。

私はこれがあなたにとって機能することを保証しません!

1 Apache2、MySQL、mod_log_sqlのインストール

残念ながら、libapache2-mod-log-sql-mysqlはDebian Lenny(テスト)およびSid(不安定)のDebianパッケージとしてのみ利用可能で、Etchにはありません。したがって、Lennyからlibapache2-mod-log-sql-mysqlパッケージをインストールします。これを行うには、/etc/apt/sources.listを開き、次の行を追加します。deb http://ftp2.de.debian.org/debian/ lenny main; あなたの/etc/apt/sources.listは次のようになります:

vi /etc/apt/sources.list

| deb http://ftp2.de.debian.org/debian/ etch main deb-src http://ftp2.de.debian.org/debian/ etch main deb http://ftp2.de.debian.org/debian/ lenny main deb http://security.debian.org/ etch/updates main contrib deb-src http://security.debian.org/ etch/updates main contrib |

もちろん(システムを混乱させないために)、Etchから適切なパッケージがない場合にのみLennyからパッケージをインストールしたいと思います - EtchとLennyの両方からパッケージがある場合は、Etchからのものをインストールしたいと思います。これを行うために、/etc/apt/preferencesでEtchからのパッケージに高い優先度を与えます:

vi /etc/apt/preferences

| Package: * Pin: release a=etch Pin-Priority: 700 Package: * Pin: release a=lenny Pin-Priority: 650 |

(etchおよびlennyという用語は、/etc/apt/sources.listの適切な用語を指します。安定版とテスト版を使用している場合は、/etc/apt/preferencesでもetchおよびlennyの代わりにstableおよびtestingを使用する必要があります。)

その後、パッケージデータベースを更新します:

apt-get update

もし次のようなエラーが表示された場合:

Segmentation faultsts... 96%

または次のようなエラー:

E: Dynamic MMap ran out of room

/etc/apt/apt.confを開き、APT::Cache-Limitの行を非常に高い値で追加します。例えば次のように:

vi /etc/apt/apt.conf 

| APT::Cache-Limit "100000000"; |

その後、再度実行します

apt-get update

そしてインストールされたパッケージをアップグレードします:

apt-get upgrade 

(質問が表示された場合は、デフォルトの値を受け入れることができます。)

Apache2、MySQL、およびmod_log_sqlをインストールするには、次を実行します:

apt-get install apache2 mysql-server mysql-client libapache2-mod-log-sql-mysql

MySQLユーザーrootのパスワードを作成します(yourrootsqlpasswordを使用したいパスワードに置き換えます):

mysqladmin -u root password yourrootsqlpassword

次に、次のコマンドで確認します:

netstat -tap | grep mysql

MySQLがリッスンしているアドレスを確認します。出力が次のようになっている場合:

tcp        0      0 localhost.localdo:mysql *:*                     LISTEN     2713/mysqld

これはMySQLがlocalhost.localdomainのみにリッスンしていることを意味しますので、前に設定したパスワードで安全です。しかし、出力が次のようになっている場合:

tcp        0      0 *:mysql *:*                     LISTEN     2713/mysqld

ホスト名のMySQLパスワードも設定する必要があります。そうしないと、誰でもデータベースにアクセスしてデータを変更できます:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword

mod_log_sqlはインストール時に自動的に有効になりましたが、もう1つ有効にすべきモジュールがあります: mod_uique_id(これは必須ではありませんが、これがないとmod_log_sqlはアクセスログのMySQLテーブルのid列を空のままにします)。id列には、標準のApacheモジュールmod_unique_idによって提供される一意のリクエストIDが含まれます。

a2enmod unique_id

Apacheを再読み込みします:

/etc/init.d/apache2 force-reload

2 仮想ホストの作成

次に、/var/www/web1/webディレクトリにデフォルトのApache vhostを作成します。この目的のために、/etc/apache2/sites-available/defaultのデフォルトのApache vhost構成を変更します。MySQLログ記録を有効にしたいvhostがすでにある場合は、このチュートリアルをあなたの状況に合わせて調整する必要があります。

まず、/var/www/web1/webディレクトリを作成し、Apacheユーザー(www-data)をそのディレクトリの所有者にします:

mkdir -p /var/www/web1/web
chown www-data /var/www/web1/web

次に、デフォルトのApache vhost構成(/etc/apache2/sites-available/default)をバックアップし、自分のものを作成します:

mv /etc/apache2/sites-available/default /etc/apache2/sites-available/default_orig
vi /etc/apache2/sites-available/default

| NameVirtualHost * ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ Options Indexes MultiViews AllowOverride None Order allow,deny allow from all |

その後、Apacheを再読み込みします:

/etc/init.d/apache2 reload

3 MySQLログ記録用に仮想ホストを構成

mod_log_sqlのドキュメントは、HTMLファイル/usr/share/doc/libapache2-mod-log-sql/manual.htmlにあります。これをワークステーションにコピーし(例: WinSCPを使用)、学習してください。

このファイルを読んだ後、apachelogsというMySQLデータベースを作成します。このデータベースには、アクセスログ用のテーブルが含まれます(複数のアクセスログテーブルを含むことができ、たとえば、持っている各仮想ホスト用の1つなど)。さらに、MySQLユーザーloguserを作成します。このユーザーは、後でmod_log_sqlがMySQLに接続するために使用されます。loguserには、アクセスログ用のテーブルを自動的に作成するためのCREATEおよびINSERT権限が与えられます(テーブルがすでに存在しない場合)およびこれらのテーブルにレコードを挿入します:

mysql -u root -p
create database apachelogs;

grant insert,create on apachelogs. to loguser@localhost identified by ‘loguser_password’;
grant insert,create on apachelogs.
to [email protected] identified by ‘loguser_password’;
FLUSH PRIVILEGES;

(loguser_passwordをお好みのパスワードに置き換えます。)

次に、MySQLシェルを終了します:

quit;

次に、/etc/apache2/sites-available/defaultのvhostを次のように変更します:

vi /etc/apache2/sites-available/default

| LogSQLLoginInfo mysql://loguser:loguser_password@localhost/apachelogs LogSQLCreateTables on LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock LogSQLTransferLogFormat AbHhmRSsTUuvI NameVirtualHost * ServerAdmin webmaster@localhost DocumentRoot /var/www/web1/web/ Options Indexes MultiViews AllowOverride None Order allow,deny allow from all LogSQLTransferLogTable web1_access_log |

LogSQLLoginInfo(データベースへのログイン資格情報を保持)、LogSQLCreateTables(mod_log_sqlにテーブルが存在しない場合は作成するよう指示)、LogSQLDBParam socketfile(MySQLソケットを指定)、およびLogSQLTransferLogFormat(データベースに何がログされるかを指定する)ディレクティブは、グローバルApache構成に入ります。LogSQLTransferLogTableディレクティブはvhost構成に入ります - これにより、各仮想ホストに異なるアクセスログテーブルを指定できます(例: web1_access_log、web2_access_log、web3_access_logなど)。

LogSQLTransferLogFormatディレクティブは、/usr/share/doc/libapache2-mod-log-sql/manual.htmlファイルで詳しく説明されています。

その後、Apacheを再読み込みします:

/etc/init.d/apache2 reload

4 mod_log_sqlのテスト

今、ブラウザでvhostのいくつかのページにアクセスし、その後apachelogsデータベースを確認します:

mysql -u root -p

use apachelogs;
show tables;

今、テーブルweb1_access_logがmod_log_sqlによって作成されたことがわかるはずです:

mysql> show tables;
+———————-+
| Tables_in_apachelogs |
+———————-+
| web1_access_log      |
+———————-+
1 row in set (0.00 sec)

mysql>

今、そのテーブルに何が入っているかを確認しましょう:

select * from web1_access_log;

すべてがうまくいった場合、そのテーブルにアクセスログが見つかるはずです:

mysql> select * from web1_access_log;
+———————+———————————————————————————————…
| id                  | agent                                                                                       …
+———————+———————————————————————————————…
| JpEF8MCoAGQAAFyuEBU | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpPHIMCoAGQAAFyuEBY | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
| JpTj0MCoAGQAAFyuEBc | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14…
+———————+———————————————————————————————…
3 rows in set (0.00 sec)

mysql>

MySQLシェルを離れるには、

quit;

と入力します。

5 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。