CentOS 7 / rsyslog / 로그 서버 구축하는 방법
CentOS을 설치하면 로그 기록을 위한 rsyslog 패키지가 설치되고 실행됩니다. 로그는 로컬 컴퓨터에 저장되는데, 관리하는 컴퓨터가 여러 대인 경우 각각의 로그를 따로 모니터링하는 것이 불편할 수 있습니다. 그런 경우 하나의 컴퓨터를 로그를 수집하는 서버로 만들어서 그 서버에 로그가 쌓이게 하면, 좀 더 수월하게 로그를 관리할 수 있습니다.
rsyslog는 간단한 설정 변경으로 로그 서버와 클라이언트를 만들 수 있습니다. 서버와 클라이언트 모두 CentOS가 OS라고 가정하겠습니다. 혹시 rsyslog가 설치되어 있지 않다면 다음과 같이 명령하여 설치하세요.
yum install rsyslog
로그 서버 만들기
- 텍스트 편집기로 설정 파일을 엽니다.
vi /etc/rsyslog.conf
- 다음 두 줄을 찾아...
#$ModLoad imtcp #$InputTCPServerRun 514
- 주석을 지우고 저정합니다.
$ModLoad imtcp $InputTCPServerRun 514
- CentOS 8이라면 다음 두 줄을 찾아 주석을 제거합니다.
#module(load="imtcp") # needs to be done just once #input(type="imtcp" port="514")
- rsyslog를 다시 시작합니다.
systemctl restart rsyslog
- 클라이언트와의 통신은 514 포트를 사용합니다. 방화벽에서 열어줍니다.
firewall-cmd --add-port=514/tcp --permanent
- 방화벽을 다시 로드합니다.
firewall-cmd --reload
로그 클라이언트 만들기
- 텍스트 편집기로 설정 파일을 엽니다.
vi /etc/rsyslog.conf
- 제일 밑에 다음 코드를 추가합니다. 192.168.0.111은 로그 수집 서버의 IP로 변경하세요.
*.* @@192.168.0.111:514
- rsyslog를 다시 시작합니다.
systemctl restart rsyslog
테스트 하기
- 로그 수집 서버에서 다음과 같이 명령합니다.
- 클라이언트를 재부팅하거나, 패키지를 설치하는 등 어떤 작업을 하면 로그가 쌓이는 걸 볼 수 있습니다.
tail -f /var/log/messages
로그를 데이터베이스에 저장하기
로그를 파일이 아닌 데이터베이스에 저장할 수 있습니다. CentOS 7 패키지에 포함된 MariaDB에 저장해보겠습니다.
- MariaDB를 설치합니다.
yum install mariadb-server
- 부팅 시 자동으로 시작되도록 합니다.
systemctl enable mariadb.service
- MariaDB를 시작합니다.
systemctl start mariadb.service
- root 비밀번호 등 몇가지를 설정합니다.
mysql_secure_installation
- rsyslog-mysql 패키지를 설치합니다.
yum install rsyslog-mysql
- 로그를 저장할 데이터베이스를 가져옵니다.
mysql -u root -p < /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
- MariaDB에 들어간 후...
mysql -u root -p
- rsyslog 사용자를 만듭니다. 비밀번호를 1234로 한다면 다음과 같이 명령합니다.
create user 'rsyslog'@'localhost' identified by '1234';
- 로그가 쌓이는 데이터베이스 이름은 Syslog입니다. rsyslog 사용자에게 권한을 부여합니다.
grant all privileges on Syslog.* to 'rsyslog'@'localhost';
- rsyslog 설정 파일(/etc/rsyslog.conf)에 다음을 추가합니다.
$ModLoad ommysql $ActionOmmysqlServerPort 3306 *.* :ommysql:127.0.0.1,Syslog,rsyslog,1234