And Brain said,

rsyslog(rocket-fast system log), 유별난 시스템 로그 로켓 본문

IT/Linux

rsyslog(rocket-fast system log), 유별난 시스템 로그 로켓

The Man 2025. 2. 26. 13:48
반응형

1. rsyslog ?

rsyslog는 기존 syslog의 성능을 대폭 강화한 고성능 로그 관리 시스템입니다. rocket-fast system log라는 이름 그대로 빠른 속도와 강력한 기능을 제공하며, 대부분의 리눅스 배포판에 기본적으로 포함되어 있습니다.

rsyslog의 특징

  • 멀티스레드 지원: 기존 syslog 대비 빠른 로그 처리 가능

  • 다양한 입력/출력 옵션: 파일, 데이터베이스, 원격 서버, Elasticsearch 등

  • 강력한 필터링 기능: Facility/Severity 기반, 정규식 활용 가능

  • UDP/TCP/TLS를 통한 원격 로그 전송 가능

  • 플러그인 기반 확장성: MySQL, Kafka, Elasticsearch 등의 연동 지원

rsyslog 상태 확인

systemctl status rsyslog   # rsyslog 서비스 상태 확인
rsyslogd -v                # rsyslog 버전 확인

주요 설정 파일

파일 설명
/etc/rsyslog.conf 메인 설정 파일
/etc/rsyslog.d/*.conf 추가 설정 파일 디렉토리
/var/log/ 기본 로그 저장 디렉토리
/var/log/syslog 시스템 로그 (Ubuntu)
/var/log/messages 시스템 로그 (CentOS)

2.1. 다양한 입력 및 출력 지원

입력 (Input Modules) 설정 및 확인 방법

1. systemd journal 로그 수집 (imjournal 모듈 사용)

 

설정 파일: /etc/rsyslog.conf 또는 /etc/rsyslog.d/*.conf

module(load="imjournal")  # systemd journal 로그 사용

 

확인 :

journalctl -f  # 실시간 journal 로그 확인

 

 

2. UDP 포트에서 syslog 수신 (imudp 모듈 사용)

 

설정 파일: /etc/rsyslog.conf 또는 /etc/rsyslog.d/udp.conf

module(load="imudp")
input(type="imudp" port="514")

 

확인 :

netstat -tunlp | grep 514  # UDP 514 포트 리스닝 확인

 

 

3. TCP 포트에서 syslog 수신 (imtcp 모듈 사용)

 

설정 파일: /etc/rsyslog.d/tcp.conf

module(load="imtcp")
input(type="imtcp" port="514")

 

확인 :

netstat -tunlp | grep 514  # TCP 514 포트 리스닝 확인

 

 

4.특정 파일을 모니터링하여 로그 수집 (imfile 모듈 사용)

 

설정 파일: /etc/rsyslog.d/imfile.conf

module(load="imfile")
input(type="imfile" File="/var/log/custom.log" Tag="custom" StateFile="customstate")

 

확인 :

tail -f /var/log/custom.log  # 해당 파일의 로그 확인

출력 (Output Modules) 설정 및 확인 방법

1. 로그를 파일에 저장 (omfile 모듈 사용)

설정 파일: /etc/rsyslog.d/output.conf

*.* /var/log/custom_output.log

 

확인 :

tail -f /var/log/custom_output.log  # 저장된 로그 확인

 

2. 로그를 MySQL DB에 저장 (ommysql 모듈 사용)

 

설정 파일: /etc/rsyslog.d/mysql.conf

module(load="ommysql")
*.* :ommysql:127.0.0.1,rsyslog,rsyslog_user,rsyslog_pass

 

확인 :

mysql -u rsyslog_user -p -e "SELECT * FROM SystemEvents;" rsyslog  # MySQL 로그 조회

 

 

3.로그를 PostgreSQL DB에 저장 (ompgsql 모듈 사용)

설정 파일: /etc/rsyslog.d/postgresql.conf

module(load="ompgsql")
*.* :ompgsql:127.0.0.1,rsyslog,rsyslog_user,rsyslog_pass

 

확인 :

psql -U rsyslog_user -d rsyslog -c "SELECT * FROM system_events;"

 

 

4. 로그를 Kafka로 전송 (omkafka 모듈 사용)

설정 파일: /etc/rsyslog.d/kafka.conf

module(load="omkafka")
*.* action(type="omkafka" broker="localhost:9092" topic="rsyslog")

 

확인 :

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic rsyslog

 

 

5. 로그를 Elasticsearch로 전송 (omelasticsearch 모듈 사용)

 

설정 파일: /etc/rsyslog.d/elasticsearch.conf

module(load="omelasticsearch")
*.* action(type="omelasticsearch" server="http://localhost:9200" searchIndex="rsyslog")

 

확인 :

curl -X GET "http://localhost:9200/rsyslog/_search?pretty"

3. rsyslog 설정 예시

3.1. 기본 설정 구조

설정 파일: /etc/rsyslog.conf

# 기본 로그 저장
*.* /var/log/syslog

# 특정 로그 필터링 후 별도 저장
authpriv.* /var/log/auth.log
kern.* /var/log/kern.log

적용 후 반영:

systemctl restart rsyslog  # 설정 반영

3.2. 필터링 설정

Facility/Severity 필터링

설정 파일: /etc/rsyslog.d/filter.conf

# 인증 관련 로그를 별도 저장
authpriv.*   /var/log/auth.log

# 커널 로그 저장
kern.*       /var/log/kern.log

특정 키워드 포함된 로그 저장

설정 파일: /etc/rsyslog.d/error_filter.conf

:msg, contains, "error" /var/log/error.log

특정 프로그램 로그 저장

설정 파일: /etc/rsyslog.d/ssh_filter.conf

:programname, isequal, "sshd" /var/log/ssh.log

특정 IP의 로그 무시

설정 파일: /etc/rsyslog.d/ip_filter.conf

if $fromhost-ip == '192.168.1.100' then stop

적용 후 반영:

systemctl restart rsyslog

그 외 예시

# 모든 mail 관련 로그 저장
mail.*                                                  -/var/log/maillog

# cron 관련 로그 저장
cron.*                                                  /var/log/cron

# 긴급 메시지는 모든 사용자에게 알림
*.emerg                                                 :omusrmsg:*

# news 관련 로그 중 crit 이상의 심각도만 저장
uucp,news.crit                                          /var/log/spooler

# 부팅 메시지 저장
local7.*                                                /var/log/boot.log

# alert 이상의 로그를 콘솔로 출력
*.alert                                                 /dev/console

 

적용 후 반영:

systemctl restart rsyslog

 

3.3. 원격 로그 전송 설정

클라이언트에서 원격 서버로 로그 전송

설정 파일: /etc/rsyslog.conf

*.* @192.168.0.10:514   # UDP 전송
*.* @@192.168.0.10:514  # TCP 전송

적용 후 반영:

systemctl restart rsyslog

서버에서 로그 수신 설정

설정 파일: /etc/rsyslog.conf

# UDP 로그 수신 활성화
module(load="imudp")
input(type="imudp" port="514")

# TCP 로그 수신 활성화
module(load="imtcp")
input(type="imtcp" port="514")

적용 후 반영:

systemctl restart rsyslog

원격 로그 저장

설정 파일: /etc/rsyslog.d/remote.conf

$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs

적용 후 반영:

systemctl restart rsyslog

3.4. DB 연동 (예: MySQL)

MySQL 설정

설정 파일: /etc/rsyslog.d/mysql.conf

module(load="ommysql")
*.* :ommysql:127.0.0.1,rsyslog,rsyslog_user,rsyslog_pass

적용 후 반영:

systemctl restart rsyslog

MySQL 테이블 생성

rsyslog는 SystemEvents 테이블을 사용하여 로그를 저장한다. 다음 SQL 명령을 실행하여 테이블을 생성한다.

CREATE DATABASE rsyslog;
CREATE TABLE SystemEvents (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    ReceivedAt DATETIME NOT NULL DEFAULT NOW(),
    DeviceReportedTime DATETIME NOT NULL,
    Facility INT NOT NULL,
    Priority INT NOT NULL,
    FromHost VARCHAR(255) NOT NULL,
    Message TEXT NOT NULL
);
GRANT ALL PRIVILEGES ON rsyslog.* TO 'rsyslog_user'@'localhost' IDENTIFIED BY 'rsyslog_pass';
FLUSH PRIVILEGES;

MySQL 데이터 확인

mysql -u rsyslog_user -p -e "SELECT * FROM rsyslog.SystemEvents LIMIT 10;"

rsyslog 핵심 요약

  1. rsyslog는 기본 설치되어 있는 고성능 로깅 시스템

  2. 멀티스레드 기반으로 대량 로그 처리 가능

  3. 강력한 필터링을 통해 로그를 분류 및 저장 가능

  4. 원격 로그 전송 및 DB 연동을 통한 유연한 로그 관리

  5. Kafka, Elasticsearch 등과 연동하여 확장 가능


반응형
Comments