서버 설정 · 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-mysqlMySQL 사용자 root의 비밀번호를 생성합니다(원하는 비밀번호로 yourrootsqlpassword를 교체하십시오):
mysqladmin -u root password yourrootsqlpassword그런 다음 다음을 사용하여 확인합니다:
netstat -tap | grep mysqlMySQL이 어떤 주소에서 수신 대기하고 있는지 확인합니다. 출력이 다음과 같으면:
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 yourrootsqlpasswordmod_log_sql은 설치할 때 자동으로 활성화되지만, 활성화해야 할 또 다른 모듈이 있습니다: mod_uique_id(필수는 아니지만, 없으면 mod_log_sql이 MySQL 테이블의 접근 로그에 대한 id 열을 비워둡니다). id 열은 표준 Apache 모듈 mod_unique_id에서 제공하는 고유 요청 ID를 포함합니다.
a2enmod unique_idApache를 다시 로드합니다:
/etc/init.d/apache2 force-reload2 가상 호스트 만들기
이제 /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 * |
그런 다음 Apache를 다시 로드합니다:
/etc/init.d/apache2 reload3 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 -pcreate 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 * |
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 reload4 mod_log_sql 테스트하기
이제 브라우저에서 vhost의 몇 개 페이지에 접근하고 나중에 apachelogs 데이터베이스를 확인합니다:
mysql -u root -puse 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 링크
- Apache: http://httpd.apache.org
- Debian: http://www.debian.org
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.