이전 젠투 박스에서 사용하던 툴입니다. 현재는 이용하고 있지 않습니다.
요구사항
PHP-Syslog-NG를 사용하기 위해서는 아래의 서비스가 동작하고 있어야 합니다.
- MySQL
- Apache2(PHP지원)
- Syslog-ng
- Cron (vixie-cron)
최근 변경사항
이제 공식 포티지에 패키지가 포함되었기 때문에, 설치는 아래와 같이 간단히 할 수 있습니다.
- emerge phpsyslogng
소개
시스템의 로그 파일은 오류, 정보, 디버그 메시지, 그리고 경고 등 많은 정보를 제공해 주기 때문에 시스템의 안정적인 운영을 위해 매우 중요합니다. 이 정보들은 심각한 문제들을 막기 위한 진단 등에 이용할 수 있으며, 트러블 슈팅등의 귀중한 자료로 이용할 수 있습니다. syslog-ng의 유연성, 단순성, 그리고 보안성 등의 이유로 시스템 로그로서 많이 선택되고 있습니다. 그렇지만, 시스템 로그는 텍스트 문서로만 제공되기 때문에 실시간 감시나 검색 등의 어려움이 있습니다. 여기서는 이런 부분을 데이터베이스(MySQL)와 웹을 이용하여 가능하도록 구축해 보는 것을 목적으로 하고 있습니다.
다운로드
젠투 소스트리에서 파일을 가져와서 파일을 풀고 적당한 위치에 옮긴 후에 사용자와 그룹설정을 아래와 같이 할 수 있습니다.
- wget ftp://ftp.kaist.ac.kr/gentoo/distfiles/php-syslog-ng-2.9.8m.tar.gz
- tar zxvf php-syslog-ng-2.9.8m.tar.gz
- mv phpsyslogng-2.8 /var/www/html/phpsyslogng
- chown www-data:www-data /var/www/html/phpsyslogng
MySQL 설정
내려받은 파일을 풀어보면, scripts라는 디렉토리가 있습니다. scripts디렉토리 안에 있는 dbsetup.sql파일을 열어서 sysloguser, syslogfeeder, 그리고 syslogadmin에 대한 암호가 PW_HERE로 되어 있는데, 이것을 자신이 원하는 값으로 지정합니다. 그리고 아래와 같이 명령하면, 테이블이 만들어지고, 앞에서 언급한 세 사용자들(sysloguser, syslogfeeder, syslogadmin)에 대한 접근 권한 등이 만들어집니다.
- mysql -u root -p < dbsetup.sql
syslog-ng 설정
scripts디렉토리에 있는 syslog.conf의 내용을 /etc/syslog-ng/syslog-ng.conf 파일에 추가합니다. 파일의 내용 중에 source(s_all)부분은 자신의 syslog-ng.conf 파일의 설정에 따라서 수정해 줘야 합니다. 어떤 경우에는 s_all대신에 src를 사용해야 합니다.
syslog-ng에서 MySQL로 pipe 설정
또한, scripts디렉토리에 있는 syslog2mysql.sh를 실행해야 합니다. 물론 PASS_HERE에는 HOWTO_setup_PHP-Syslog-NG#MySQL 설정에서 지정한 syslogfeeder 사용자의 암호로 바꾸어야 합니다.
- ./syslog2mysql.sh
매번 실행하는 것이 귀찮을 수도 있고, 더구나 잊어버릴 수도 있기 때문에 /etc/crontab에 아래와 같이 적어주는 것이 좋습니다. 파일은 /root 디렉토리 아래로 복사합니다.
- sudo nano /etc/crontab
* 0 * * * root /root/backupmysql.sh >> /var/log/mysql.log 2>&1
@reboot root /root/syslog2mysql.sh >> /var/log/mysql.log 2>&1
아래의 내용은 젠투 위키 문서의 내용으로 백업과 관련된 내용입니다.
- sudo nano /root/backupmysql.sh
#!/bin/bash
# make sure you have directory /var/log/backup created with mask 600
/usr/bin/mysqlhotcopy --user=syslogadmin --password=암호 --allowold syslog /var/log/backup</pre>
설정이 끝났으면, syslog-ng 데몬을 재시작해야 합니다.
- sudo systemctl restart syslog-ng
config.php 수정
config/config.php의 파일 내용 중에 dbsetup.sql에서 지정한 sysloguser와 syslogadmin 사용자의 암호를 바꾸어 주어야 합니다. 또한 MySQL서버가 웹서버와 같은 컴퓨터에서 동작하지 않을 경우에는 MySQL이 동작하고 있는 URL을 localhost 대신에 적어 주어야 합니다. 나머지 부분은, 일반적으로는 할 필요가 없지만, 파일에 적혀있는 설명을 읽고 자신이 원하는 값으로 수정해 줄 수 있습니다.
php-syslog-ng의 보안
인증 설정은 config/config.php 파일에서 설정할 수 있으며, 기본적으로 인증을 하도록 설정이 되어 있습니다. 물론 인증 설정을 하지 않으면, 다른 사람들이 웹을 통해서 시스템의 로그를 볼 수 있습니다. 이것은 매우 나쁜 선택이기 때문에, 이 경우에는 아파치의 인증을 사용하여 네트워크를 통해 다른 컴퓨터에서 php-syslog-ng에 접근하지 못하도록 설정을 해야 합니다.
또 다른 일은 설정 파일 등의 내용에 암호와 같은 중요한 사항들이 들어있기 때문에, 설정 파일이 들어 있는 디렉토리를 웹을 통해서 직접적으로 접근하게 함으로써 로그의 변형이나 원하지 않는 접근 허용 등의 문제가 발생할 수 있습니다. 아래의 방법으로 아파치에서 scripts, includes, 그리고 config 디렉토리를 접근하지 못하도록 설정할 수 있습니다.
- sudo nano /etc/apache2/httpd.conf
<Directory "/var/www/localhost/htdocs/phpsyslogng/scripts">
Deny from all
</Directory>
<Directory "/var/www/localhost/htdocs/phpsyslogng/includes">
Deny from all
</Directory>
<Directory "/var/www/localhost/htdocs/phpsyslogng/config">
Deny from all
</Directory>
이것으로 충분하지 않다고 생각되는 분들은 Apache2_mod_ssl을 참고하셔서 설정한 후에, 아래와 같이 아파치의 설정을 변경하셔서 http대신에 https 접근하시는 것이 좋습니다.
- sdudo nano /etc/apache2/httpd.conf
<Location /phpsyslogng>
Options None
<Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
AuthType Basic
AuthName "PHP_Syslog-ng"
AuthUserFile /var/www/localhost/htdocs/phpsyslogng/.syslogpasswd
Require valid-user
</Limit>
</Location>
설정에 맞는 사용자와 암호를 처음으로 만들 경우에는, 아래의 방법으로 만들 수 있습니다.
- sudo htpasswd2 -c /var/www/localhost/htdocs/phpsyslogng/.syslogpasswd sysloguser
두번째 사용자부터는 아래의 방법으로 만들 수 있습니다.
- sudo htpasswd2 /var/www/localhost/htdocs/phpsyslogng/.syslogpasswd sysloguser2
로그 회전
로그 회전은 데이터베이스(MySQL)의 주 테이블에서 열을 제거함으로써 데이터베이스의 성능을 높여줍니다. scripts/logrotage.php 파일을 열어서 $APP_ROOT의 값을 자신의 시스템에 맞게 수정해 주어야 합니다. 또한 config/config.php 파일에서 LOGROTATERETENTION을 설정해 줄 수 있습니다. 이것은 로그 회전이 이루어질 때, 기본적으로는 90일이 지난 로그는 삭제를 한다는 의미입니다.
로그 회전은 하루에 한 번이 최대값입니다. 시스템의 상황에 따라서, 예를 들어 일주일에 한번 등, 기간을 늘려줄 수 있습니다.
만약 한 달에 한 번씩 로그 회전을 하고 싶으면, 아래와 같이 설정해 줄 수 있습니다.
- sudo cp scripts/logrotate.php /etc/cron.monthly
보안을 위해 아래와 같이 사용자 및 접근 권한 변경을 해 두세요.
- sudo chmod 700 /etc/cron.monthly/logrotate.php
- sudo chown root:root /etc/cron.monthly/logrotate.php
점검
웹브라우저를 열어서 아래와 같이 접근을 시도해 보세요. Username과 Password에는 admin을 입력하면, 인증이 완료됩니다. 이후에 config를 눌러서 암호를 바꾸어야 합니다.
HOWTO_PHP-Syslog-NG#php-syslog-ng의 보안에서 Apache2_mod_ssl을 사용하도록 설정을 하셨다면, 아래와 같이 접근하셔서 점검하실 수 있습니다.
https://localhost/phpsyslogng/