And Brain said,
rsyslog(rocket-fast system log), 유별난 시스템 로그 로켓 본문
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 로그 확인
설정 파일: /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 로그 조회
설정 파일: /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;"
설정 파일: /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 핵심 요약
rsyslog는 기본 설치되어 있는 고성능 로깅 시스템
멀티스레드 기반으로 대량 로그 처리 가능
강력한 필터링을 통해 로그를 분류 및 저장 가능
원격 로그 전송 및 DB 연동을 통한 유연한 로그 관리
Kafka, Elasticsearch 등과 연동하여 확장 가능
'IT > Linux' 카테고리의 다른 글
inode, Linux 파일 시스템의 보이지 않는 인덱스 (0) | 2025.03.04 |
---|---|
wheel과 sudo, Linux의 원로원들 (0) | 2025.02.27 |
systemd, Linux PID 1번의 이름을 가진자 (0) | 2025.02.20 |
at vs cron, Linux 스케줄링의 두 가지 방법론 (0) | 2025.02.17 |
Linux 로그인 전후 메시지 변경해보기 (0) | 2025.02.17 |