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 安裝這兩個套件:
下載 mod_log_sql 源始檔及進行編譯:
# 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:
加入以下兩行:
LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so
Debian / Ubuntu:
Debian 及 Ubuntu 的安裝方便很多,可以直接用 apt-get 完成:
# a2enmod unique_id
安裝好 mod_log_sql 後,現在設定 Apache 及 mod_log_sql,先開啟用作儲存 Apache Log 的資料庫及 MySQL 帳號:
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 的檔案,加入以下內容:
LogSQLLoginInfo mysql://loguser:loguser_passwd@localhost/apachelogs
LogSQLCreateTables on
LogSQLDBParam socketfile /var/run/mysqld/mysqld.sock
LogSQLTransferLogFormat AbHhmRSsTUuvI
最後重新啟動 Apache 便完成了:
如果想將 Apache Log 儲存到遠端 MySQL 伺服器,只要將 LogSQLLoginInfo 一行的 localhost, 改成遠端 MySQL 伺服器的 ip 或 hostname 即可。