Linux 技术手札

Apache Log 储存到 MySQL

Apache 默认会将 Log 记录档储存到文字档,一般会在 logs/ 目录,或者 /var/log/httpd/ 目录。将 Apache Log 储存到 MySQL 除了可以方便过滤记录档内资讯外,也可以实现多个 Apache Log 集中管理。

以前试过自己写 Shell Script 将 Log 插入 MySQL,但原来已经有 Apache Module 可以做这件事,十分方便。以下是 Apache 设定将 Log 储存到 MySQL 的方做法。

安装 mod_log_sql

以下会介绍 Redhat 及 Debian 系统的安装方法:

RHEL / CentOS / Fedora:
首先安装 mod_log_sql, mod_log_sql 是一个 Apache Module,安装后可以很容易将 Apache 记录档储存到 MySQL,而 mod_log_sql 需要安装 httpd-devel 及 mysql-devel 套件编译,用 YUM 安装这两个套件:

# yum install httpd-devel mysql-devel -y

下载 mod_log_sql 源始档及进行编译:

# cd /usr/local/src
# wget http://www.outoforder.cc/downloads/mod_log_sql/mod_log_sql-1.101.tar.bz2
# cd mod_log_sql-1.101
# ./configure –with-apxs=/usr/sbin/apxs –with-mysql=/usr/lib64/mysql/
# make && make install

这时 log_mod_sql.so 会编译进 Apache 的 modules 目录,开启 httpd.conf:

# vi /etc/httpd/cond/httpd.conf

加入以下两行:

LoadModule log_sql_module modules/mod_log_sql.so
LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so

Debian / Ubuntu:

Debian 及 Ubuntu 的安装方便很多,可以直接用 apt-get 完成:

# apt-get install libapache2-mod-log-sql-mysql
# a2enmod unique_id

安装好 mod_log_sql 后,现在设定 Apache 及 mod_log_sql,先开启用作储存 Apache Log 的数据库及 MySQL 帐号:

# mysql -uroot -p
mysql> create database apachelogs;
mysql> grant all on apachelogs.* to loguser@localhost identified by ‘loguser_passwd’;
mysql> flush privileges;

以上会建立一个名为 apachelogs 的数据库,并建立一个有读写权限的 MySQL 帐号 loguser, 密码是 loguser_passwd.

开启 httpd.conf 档案,或者储存 VirtulHost 的档案,加入以下内容:

LogSQLTransferLogTable web_access_log
LogSQLLoginInfo mysql://loguser:loguser_passwd@localhost/apachelogs
LogSQLCreateTables on
LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock
LogSQLTransferLogFormat AbHhmRSsTUuvI

最后重新启动 Apache 便完成了:

# systemctl restart httpd

如果想将 Apache Log 储存到远端 MySQL 服务器,只要将 LogSQLLoginInfo 一行的 localhost, 改成远端 MySQL 服务器的 ip 或 hostname 即可。

Exit mobile version