카테고리 보관물: Syslog & Log Analyzer

rsyslog-mysql + Log Analyzer 설치

개요

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에 직접 적재하는 방식도 지원됩니다.

참고

참고 문서: rsyslog ommysql 모듈 공식 문서 · Log Analyzer 공식 문서

Syslog Server 설정

개요

Syslog Server 설정은 분산된 리눅스/윈도우 서버의 이벤트 로그를 중앙에서 수집·관리하기 위한 필수 인프라 구성입니다. rsyslog 기반의 Server Side에서 수신 설정을 하고, 각 Client 서버에서 원격 Syslog 서버 IP를 지정하면 로그가 자동으로 중앙 서버로 전송됩니다. 이 글에서는 CentOS 6/7 환경의 rsyslog 설정과 Windows의 eventlog-to-syslog 연동 방법을 정리합니다.

Server Side

  • CentOS(RHEL)의 경우 기본 경로는 /var/log/* 이며 필요시 아래와 같이 /logs/* 로 변경이 가능 합니다.
  • CentOS 7 설치
# vi /etc/rsyslog.conf
// 커널 로그 모듈 활성화
$ModLoad imklog
// 로그 저장 경로 변경 또는 추가
*.info;mail.none;authpriv.none;cron.none    /logs/messages
authpriv.*                                  /logs/secure
cron.*                                      /logs/cron
uucp,news.crit                              /logs/spooler
local7.*                                    /logs/boot.log

// Service 재시작
# systemctl restart rsyslog
  • CentOS 6 설치
# vi /etc/rsyslog.conf
// 커널 로그 모듈 활성화
$ModLoad imklog
// 로그 저장 경로 변경 또는 추가
*.info;mail.none;authpriv.none;cron.none    /logs/messages
authpriv.*                                  /logs/secure
cron.*                                      /logs/cron
uucp,news.crit                              /logs/spooler
local7.*                                    /logs/boot.log

// Service 재시작
# service rsyslog restart

Client Side

  • 리눅스의 경우 rsyslog.conf 또는 syslog.conf에 아래 행을 추가 하여 Syslog 서버로 로그를 전송할 수 있습니다.
  • CentOS 7 설치
# vi /etc/rsyslog.conf
// 커널 로그 모듈 활성화
$ModLoad imklog
// 로그 서버 IP(ex> x.x.x.x) 또는 Hostname 추가
*.* @x.x.x.x

// Service 재시작
# systemctl restart rsyslog
  • CentOS 6 설치
# vi /etc/rsyslog.conf
// 커널 로그 모듈 활성화
$ModLoad imklog
// 로그 서버 IP(ex> x.x.x.x) 또는 Hostname 추가
*.* @x.x.x.x

// Service 재시작
# service rsyslog restart
  • Windows 설치(eventlog-to-syslog)
  1. 윈도우 계열의 이벤트로그(eventlog)를 Syslog 서버로 전송
  2. App 다운 및 압축 해제(http://code.google.com/p/eventlog-to-syslog)
  3. 해당 파일을 C:\Windows\System32\ 로 복사
  4. evtsys 서비스 설치(아래 Prompt 또는 Powershell 실행)
  5. services.msc 실행 서비스 등록 확인 후 속성에서 시작 유형 ‘자동’ / 변경 후 서비스 시작
// x.x.x.x의 Syslog 서버의 514 포트로 이벤트로그를 전송하는 서비스 설치
C:\Windows\System32> evtsys -i -h x.x.x.x -p 514
Usage: evtsys -i|-u|-d [-h host[;host2;…]] [-f facility] [-p port]
       [-t tag] [-s minutes] [-q bool] [-l level] [-n] [-a]
  -i           Install service
  -u           Uninstall service
  -d           Debug: run as console program
  -a           Use our IP address (or fqdn) in the syslog message
  -h hosts     Name of log host(s), separated by a ‘;’
  -f facility  Facility level of syslog message
  -l level     Minimum level to send to syslog
               0=All/Verbose, 1=Critical, 2=Error, 3=Warning, 4=Info
  -n           (**Win9x/Server 2003 Only**) Include only those events specified
               in the config file
  -p port      Port number of syslogd
  -q bool      Query the Dhcp server to obtain the syslog/port to log to
               (0/1 = disable/enable)
  -t tag       Include tag as program field in syslog message
  -s minutes   Optional interval between status messages. 0 = Disabled

Default port: 514
Default facility: daemon
Default status interval: 0
Host (-h) required if installing.
Command did not complete due to a failure

Evtsys Options

참고

참고 문서: rsyslog 공식 설정 문서 · rsyslog.conf(5) man page

Rsyslog Log Analyzer Overview

개요

Rsyslog Log Analyzer는 rsyslog 데몬으로 수신한 리눅스, 윈도우, 네트워크 장비의 로그를 MariaDB(MySQL)에 적재하고, Apache 기반의 웹 인터페이스로 간단한 통계를 시각화하는 오픈소스 툴입니다. 오래된 툴이라 UI가 다소 구식이지만 간단한 로그 집계와 검색에는 여전히 활용할 수 있습니다.

로그 수집 아키텍처

Rsyslog + MariaDB + Log Analyzer로 구성된 중앙 로그 시스템의 데이터 흐름은 다음과 같습니다. 각 서버(리눅스, 윈도우, 네트워크 장비)의 rsyslog/syslog 클라이언트가 UDP/TCP 514 포트로 중앙 rsyslog 서버에 로그를 전송합니다. 중앙 서버의 rsyslog는 ommysql 모듈을 통해 MariaDB의 Syslog 데이터베이스에 로그를 INSERT합니다. Log Analyzer는 Apache와 PHP로 구동되는 웹 인터페이스로, 브라우저에서 호스트별 로그 발생 빈도, 심각도별 분류, 키워드 검색 기능을 제공합니다.

시스템 구성

rsyslog 데몬을 사용하여 리눅스, 윈도우, 네트워크 장비로 부터 수신 로그를  mariadb에 적재하게 되고 아파치로 간단한 통계로도 볼 수 있게 구축 해서 사용하고 있습니다.

나온지도 오래되었고 UI가 상당히 구식이지만 간단하게 보기에는 쓸만하여 종종 사용하는 편 입니다.

단점은 DB에 로그가 장기간 쌓이면 통계 페이지를 제대로 표시하지 못하는 경우도 있고 특정 호스트의 로그 발생 빈도가 높으면 통계 페이지를 보기 불편한 부분이 있었습니다. 저는 일정 기간 이전의 로그를 삭제하는 SQL스크립트를 crontab에 등록 하여 유지하고 있습니다.

그와 별개로 DB에 있는 로그 데이터를 elasticsearch등으로 시각화 시키는 것도 좋은 방법인 것 같습니다.

※ 테스트를 해보진 않았지만 Log Analyzer 최신 버전은 그래프 생성 관련 타임 아웃 현상을 해결 했다고 합니다.

화면 구성 예시

아래는 Rsyslog Log Analyzer의 실제 화면 구성입니다. 호스트별 로그 발생 현황과 상세 검색 기능을 웹 브라우저에서 확인할 수 있습니다.

Rsyslog Log Analyzer 대시보드 — 호스트별 로그 발생 현황

Rsyslog Log Analyzer 상세 로그 검색 화면

운영 시 고려사항

DB에 로그가 장기간 쌓이면 통계 페이지 표시가 느려지거나 실패할 수 있습니다. 일정 기간 이전 로그를 정기적으로 삭제하는 SQL 스크립트를 스케줄러에 등록하여 DB 크기를 관리하는 것이 좋습니다. 또한 특정 호스트의 로그 발생 빈도가 과도하게 높을 경우 rsyslog 필터 규칙으로 해당 호스트 로그를 별도 파일로 분리하는 것도 방법입니다.

보다 현대적인 로그 시각화가 필요하다면 Elasticsearch + Kibana 또는 Loki + Grafana 조합을 검토해볼 수 있습니다.

참고

참고 문서: Adiscon Log Analyzer 공식 사이트 · rsyslog ommysql 모듈 문서