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 [email protected] identified by ‘loguser_passwd’;
mysql> flush privileges;

以上會建立一個名為 apachelogs 的資料庫,並建立一個有讀寫權限的 MySQL 帳號 loguser, 密碼是 loguser_passwd.

開啟 httpd.conf 檔案,或者儲存 VirtulHost 的檔案,加入以下內容:

LogSQLTransferLogTable web_access_log
LogSQLLoginInfo mysql://loguser:[email protected]/apachelogs
LogSQLCreateTables on
LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock
LogSQLTransferLogFormat AbHhmRSsTUuvI

最後重新啟動 Apache 便完成了:

# systemctl restart httpd

如果想將 Apache Log 儲存到遠端 MySQL 伺服器,只要將 LogSQLLoginInfo 一行的 localhost, 改成遠端 MySQL 伺服器的 ip 或 hostname 即可。




Leave a Reply