서버 설정 · 4 min read · Feb 03, 2026

Apache2: MySQL 데이터베이스에 mod_log_sql로 로깅하기 (Debian Etch)

Apache2: MySQL 데이터베이스에 mod_log_sql로 로깅하기 (Debian Etch)

버전 1.0
저자: 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 대신 안정성과 테스트를 사용해야 합니다.)

그 후, 패키지 데이터베이스를 업데이트합니다:

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은 설치할 때 자동으로 활성화되지만, 활성화해야 할 또 다른 모듈이 있습니다: 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 데이터베이스를 생성합니다(여러 접근 로그 테이블을 포함할 수 있으며, 예를 들어 각 가상 호스트마다 하나씩). 또한 mod_log_sql이 나중에 MySQL에 연결하는 데 사용할 MySQL 사용자 loguser를 생성합니다. 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;

이제 mod_log_sql에 의해 web1_access_log 테이블이 생성된 것을 볼 수 있어야 합니다:

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>

quit;

를 입력하여 MySQL 셸을 종료합니다.

5 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.