개요
rsyslog-mysql을 사용하면 분산된 서버의 syslog를 MySQL(MariaDB) 데이터베이스에 적재하고, Log Analyzer 웹 인터페이스로 통계와 검색 기능을 제공할 수 있습니다. rsyslog의 ommysql 모듈이 핵심이며, 로그 서버에서 DB 적재 설정을 완료하면 Apache + PHP 기반의 Log Analyzer가 웹 브라우저에서 로그를 시각화합니다.
설치 환경
- CentOS 7.1 64bit
- Apache 2.4
- PHP 5.4
- MariaDB 5.5
rsyslog-mysql 동작 원리
rsyslog의 ommysql(Output Module MySQL) 플러그인은 rsyslog가 수신하는 모든 syslog 이벤트를 MySQL/MariaDB 데이터베이스의 SystemEvents 테이블에 INSERT합니다. 중앙 로그 서버에 rsyslog-mysql을 구성하고 원격 서버들이 UDP/TCP 514 포트로 로그를 전송하면, 모든 서버의 로그를 단일 DB에서 관리하고 SQL 쿼리로 검색할 수 있습니다.
rsyslog-mysql 패키지는 createDB.sql 스크립트를 포함하며, 이를 실행하면 Syslog DB와 SystemEvents 테이블이 자동으로 생성됩니다. 테이블에는 메시지 본문, Facility, 호스트명, 우선순위, 타임스탬프 등이 저장되어 장기 보관과 분석에 적합합니다.
rsyslog-mysql
- rsyslog-mysql의 스키마 탬플릿을 활용하여 Syslog서버의 로그를 MariaDB 또는 MySQL의 DB에 보관 처리를 구현할 수 있습니다.
- 로그가 쌓이는 SystemEvents 테이블의 사이즈만 주기적으로 관리한다면 대량의 서버 또는 네트워크 장비의 로그도 관리 및 활용이 용이합니다.
- 선행 설치 패키지 필요(rsyslog, MariaDB(https://www.sierracloud.dev/mariadb-10-3-%ec%84%a4%ec%b9%98/))
# rpm -qa | grep rsyslog-mysql
# yum install rsyslog-mysql
- DB Create
// DB 정상 생성 확인 캐릭터셋 UTF8 변경 후 SQL 스크립트 적용
# mysql -u root -p < /usr/share/doc/rsyslog-mysql-7.4.7/createDB.sql
# mysql -u root -p
// 계정 생성
> create user 'rsyslog'@'localhost' identified by 'rsyslog';
// 권한 부여
> grant all on Syslog.* to 'rsyslog'@'localhost' with grant option;
> flush privileges;
- rsyslog Server Setting
# vi /etc/rsyslog.conf
// 파일 포맷 탬플릿 지정
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
// 커널 로그 모듈 활성화
$ModLoad imklog
// 로그 작성 제어 모듈
$ModLoad imuxsock
// 통신용 Listen Port 지정
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
// DB 연동 모듈
$ModLoad ommysql.so
// DB 칼럼 포맷
$template dbFormat,"insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%FROMHOST%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQL
// 로그 별 DB 포맷 설정
*.info;mail.none;authpriv.none;cron.none :ommysql:localhost,Syslog,rsyslog,rsyslog;dbFormat
// rsyslog 재시작
# systemctl restart rsyslog
Log Analyzer
- 기 구성된 rsyslog-mysql을 통해 웹상에서 조회 및 그래프 처리를 해주는 솔루션입니다.
- 오래되긴 했지만 기능도 단순하고 무료이므로 편하게 사용하기 좋았었습니다.
- 선행 설치 패키지 필요(httpd, php-mysql)
- log analyzer 설치 및 설정
// Log Analyzer 다운 및 압축 해제
# wget http://download.adiscon.com/loganalyzer/loganalyzer-3.0.6.tar.gz
# tar zxvf loganalyzer-3.0.6.tar.gz
// 웹소스 복사(아파치가 설치된 DocumentRoot의 Sub디렉토리에 위치시킴)
# cp -r loganalyzer3.0.6/src/* /var/www/html/Rsyslog
// 구성 파일 복사(아파치가 설치된 DocumentRoot의 Sub디렉토리에 위치시킴)
# cp loganalyer-3.0.6/contrib/* /var/www/html/Rsyslog/
/ 권한 변경
# chmod +x configure.sh secure.sh
실행
# ./configure.sh
- 웹 설치
| 브라우저 | http://’ip address’/Rsyslog |
| here 클릭 | |
| Next 클릭 | |
| Next 클릭 | |
| DB 정보 입력 후Next 클릭 | Enable User Database = Yes Database Name = Syslog Database User = rsyslog Database Password = rsyslog |
| Next 클릭Step 5 내용 확인 후 Next 클릭 | |
| 관리자 계정 정보 입력 후 Next 클릭 | ※ 분실시 주의 |
| DB 정보 입력 후 Next 클릭 | MYSQL Native 선택 Database Name = Syslog Database Tablename = SystemEvents (대소문자 구분) Database User = rsyslog Database Password = rsyslog Enable Row Counting = Yes |
| 완료 |
- 축하드립니다… 설치를 성공하셨으면 아래 같은 화면을 보시게 될겁니다…
운영 주의사항
rsyslog-mysql 환경에서 SystemEvents 테이블은 트래픽이 많은 서버에서 빠르게 커질 수 있습니다. 수백 대 서버의 로그를 수집하는 환경에서는 하루에 수백만 건의 레코드가 쌓이므로 주기적인 파티션 관리나 오래된 데이터 삭제가 필요합니다. MariaDB 이벤트 스케줄러나 외부 cron으로 N일 이상 된 데이터를 자동 삭제하는 쿼리를 등록하면 디스크 용량을 관리할 수 있습니다.
Log Analyzer는 PHP 5 기반의 오래된 도구로, 현재 PHP 8 환경에서는 동작하지 않을 수 있습니다. 최신 환경에서는 Kibana + Elasticsearch(ELK 스택) 또는 Grafana + Loki 조합이 더 강력한 로그 시각화와 검색 기능을 제공합니다. rsyslog의 omelasticsearch 플러그인으로 Elasticsearch에 직접 적재하는 방식도 지원됩니다.








