로그 서버 · 6 min read · Nov 15, 2025
Debian 9에서 Rsyslog로 중앙 집중식 로그 서버 설치하기
리눅스에서 로그 파일은 시스템 기능에 대한 메시지를 포함하는 파일로, 시스템 관리자가 기계에서 발생할 수 있는 문제를 식별하는 데 사용됩니다. 로그는 관리자가 시간에 따라 시스템에서 발생한 이벤트를 시각화하는 데 도움을 줍니다. 일반적으로 모든 로그 파일은 리눅스의 /var/log 디렉토리 아래에 보관됩니다. 이 위치에는 시스템 이벤트 기록을 위한 로그 파일, 보안 관련 메시지를 위한 로그 파일, 커널, 사용자 또는 크론 작업 전용의 다른 로그 파일 등 다양한 메시지를 저장하기 위한 여러 유형의 로그 파일이 있습니다. 로그 파일의 주요 목적은 시스템 문제를 해결하는 것입니다. 리눅스의 대부분의 로그 파일은 rsyslogd 서비스에 의해 제어됩니다. 최신 리눅스 배포판에서는 로그 파일이 systemd 초기화 프로그램의 일부인 journald 시스템 서비스에 의해 제어되고 관리됩니다. 저널 데몬에 의해 저장된 로그는 이진 형식으로 기록되며 주로 휘발성이며, RAM과 /run/log/journal/의 링 버퍼에 저장됩니다. 그러나 저널 서비스는 Syslog 메시지를 영구적으로 저장하도록 구성할 수도 있습니다.
리눅스에서 rsyslog 서버는 서비스-클라이언트 모델 방식으로 중앙 로그 관리자를 실행하도록 구성할 수 있으며, TCP 또는 UDP 전송 프로토콜을 통해 네트워크를 통해 로그 메시지를 전송하거나 로그를 생성하는 네트워크 장치, 서버, 라우터, 스위치 또는 기타 시스템 또는 임베디드 장치로부터 로그를 수신할 수 있습니다.
Rsyslog 데몬은 클라이언트와 서버로 동시에 실행되도록 설정할 수 있습니다. 서버로 실행되도록 구성된 Rsyslog는 기본 포트 514 TCP 및 UDP에서 수신 대기하며 원격 시스템에서 네트워크를 통해 전송된 로그 메시지를 수집하기 시작합니다. 클라이언트로서 Rsyslog는 내부 로그 메시지를 동일한 TCP 또는 UDP 포트를 통해 원격 Ryslog 서버로 전송합니다.
Rsyslog는 선택된 속성과 작업에 따라 syslog 메시지를 필터링합니다. rsyslog 필터는 다음과 같습니다:
- 시설 또는 우선 순위 필터
- 속성 기반 필터
- 표현식 기반 필터
시설 필터는 로그를 생성하는 리눅스 내부 하위 시스템으로 표현됩니다. 아래와 같이 분류됩니다:
- auth/authpriv = 인증 프로세스에서 생성된 메시지
- cron = 크론 작업과 관련된 로그
- daemon = 실행 중인 시스템 서비스와 관련된 메시지
- kernel = 리눅스 커널 메시지
- mail = 메일 서버 메시지
- syslog = syslog 또는 기타 데몬과 관련된 메시지 (DHCP 서버가 여기에 로그를 보냄)
- lpr = 프린터 또는 인쇄 서버 메시지
- local0 - local7 = 관리자 제어 하의 사용자 정의 메시지
우선 순위 또는 심각도 수준은 아래에 설명된 대로 키워드와 숫자에 할당됩니다.
- emerg = 긴급 – 0
- alert = 경고 – 1
- err = 오류 – 3
- warn = 경고 – 4
- notice = 알림 – 5
- info = 정보 – 6
- debug = 디버깅 – 7 최고 수준
특별한 Rsyslog 키워드도 사용 가능합니다. 예를 들어 모든 시설 또는 우선 순위를 정의하는 별표 (*) 기호, 우선 순위가 없음을 지정하는 none 키워드, 특정 우선 순위만 선택하는 등호 ( =) 기호, 우선 순위를 부정하는 느낌표 ( !) 기호 등이 있습니다.
syslog의 작업 부분은 대상 문으로 표현됩니다. 로그 메시지의 대상은 파일 시스템에 저장된 파일, /var/log/ 시스템 경로의 파일, 명명된 파이프 또는 FIFO를 통한 다른 로컬 프로세스 입력이 될 수 있습니다. 로그 메시지는 사용자에게 전달되거나 블랙홀 (/dev/null)로 폐기되거나 stdout으로 전송되거나 TCP/UDP 프로토콜을 통해 원격 syslog 서버로 전송될 수 있습니다. 로그 메시지는 MySQL 또는 PostgreSQL과 같은 데이터베이스에 저장될 수도 있습니다.
Rsyslog를 서버로 구성하기
Rsyslog 데몬은 대부분의 리눅스 배포판에 자동으로 설치됩니다. 그러나 시스템에 Rsyslog가 설치되어 있지 않은 경우 아래 명령 중 하나를 실행하여 서비스를 설치할 수 있습니다. 명령을 실행하려면 루트 권한이 필요합니다.
Debian 기반 배포판에서:
sudo apt-get install rsyslogRHEL 기반 배포판인 CentOS에서:
sudo yum install rsyslogRsyslog 데몬이 시스템에서 시작되었는지 확인하려면 배포판 버전에 따라 아래 명령을 실행하십시오.
systemd가 있는 최신 리눅스 배포판에서:
systemctl status rsyslog.serviceinit가 있는 구형 리눅스 버전에서:
service rsyslog status/etc/init.d/rsyslog statusrsyslog 데몬을 시작하려면 다음 명령을 실행하십시오.
구형 리눅스 버전에서:
service rsyslog start/etc/init.d/rsyslog start최신 리눅스 배포판에서:
systemctl start rsyslog.service서버 모드에서 실행할 rsyslog 프로그램을 설정하려면 /etc/rsyslog.conf의 주요 구성 파일을 편집하십시오. 이 파일에서 아래 샘플에 표시된 대로 다음 변경을 수행하십시오.
sudo vi /etc/rsyslog.confUDP 로그 메시지 수신을 허용하기 위해 다음 줄에서 해시태그 (#)를 제거하여 주석을 해제하십시오. 기본적으로 UDP 포트는 syslog가 메시지를 전송 및 수신하는 데 사용됩니다.
$ModLoad imudp
$UDPServerRun 514UDP 프로토콜은 네트워크를 통해 데이터를 교환하는 데 신뢰할 수 없으므로 Rsyslog를 설정하여 TCP 프로토콜을 통해 원격 서버에 로그 메시지를 출력할 수 있습니다. TCP 수신 프로토콜을 활성화하려면 /etc/rsyslog.conf 파일을 열고 아래와 같이 다음 줄의 주석을 해제하십시오. 이렇게 하면 rsyslog 데몬이 포트 514에서 TCP 소켓에 바인딩하고 수신 대기할 수 있습니다.
$ModLoad imtcp
$InputTCPServerRun 514 두 프로토콜 모두 rsyslog에서 동시에 실행되도록 활성화할 수 있습니다.
rsyslog 데몬에 대한 접근을 허용할 발신자를 지정하려면 활성화된 프로토콜 줄 뒤에 다음 줄을 추가하십시오:
$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com또한 수신 로그를 받기 전에 rsyslog 데몬이 구문 분석할 새 템플릿을 생성해야 합니다. 템플릿은 로컬 Rsyslog 서버가 수신 로그 메시지를 저장할 위치를 지시해야 합니다. 아래 샘플과 같이 $AllowedSender 줄 바로 뒤에 템플릿을 정의하십시오.
$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
**.* *?Incoming-logs
& ~** 커널 시설에서 생성된 메시지만 기록하려면 아래 구문을 사용하십시오.
kern.* ?Incoming-logs수신된 로그는 위의 템플릿에 의해 구문 분석되며 /var/log/ 디렉토리의 로컬 파일 시스템에 저장됩니다. 메시지를 생성한 클라이언트 호스트 이름 클라이언트 시설에 따라 이름이 지정된 파일에 저장됩니다: %HOSTNAME% 및 %PROGRAMNAME% 변수.
아래 & ~ 리디렉션 규칙은 Rsyslog 데몬이 위의 변수 이름으로 지정된 파일에만 수신 로그 메시지를 저장하도록 구성합니다. 그렇지 않으면 수신된 로그는 추가로 처리되어 /var/log/syslog 파일과 같은 로컬 로그의 내용에도 저장됩니다.
메일과 관련된 모든 로그 메시지를 폐기하는 규칙을 추가하려면 다음 문을 사용할 수 있습니다.
mail.* ~파일 이름을 출력하는 데 사용할 수 있는 다른 변수는 다음과 같습니다: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%
Rsyslog 버전 7부터는 Rsyslog 서버에서 템플릿을 선언하는 데 사용할 수 있는 새로운 구성 형식이 제공됩니다.
버전 7 템플릿 샘플은 아래 줄과 같이 보일 수 있습니다.
template(name="MyTemplate" type="string"
string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
)위의 템플릿을 작성하는 또 다른 방법은 아래와 같이 할 수 있습니다:
template(name="MyTemplate" type="list") { constant(value="/var/log/") property(name="fromhost-ip") constant(value="/") property(name="programname" SecurePath="replace") constant(value=".log") }* ***
rsyslog 구성 파일에 대한 변경 사항을 적용하려면 데몬을 재시작하여 새 구성을 로드해야 합니다.
sudo service rsyslog restartsudo systemctl restart rsyslogDebian 리눅스 시스템에서 수신 대기 상태의 rsyslog 소켓을 확인하려면 루트 권한으로 netstat 명령을 실행할 수 있습니다. 결과를 grep과 같은 필터 유틸리티를 통해 전달하십시오.
sudo netstat –tulpn | grep rsyslog수신 연결을 허용하려면 방화벽에서 Rsyslog 포트를 열어야 합니다.
Firewalld가 활성화된 RHEL 기반 배포판에서 아래 명령을 실행하십시오:
firewall-cmd --permanent --add-port=514/tcpfirewall-cmd --permanent --add-port=514/tcpfirewall-cmd –reloadUFW 방화벽이 활성화된 Debian 기반 배포판에서 아래 명령을 실행하십시오:
ufw allow 514/tcpufw allow 514/udpIptables 방화벽 규칙:
iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPTiptables -A INPUT -p udp --dport 514 -j ACCEPTRsyslog를 클라이언트로 구성하기
rsyslog 데몬이 클라이언트 모드로 실행되고 로컬 로그 메시지를 원격 Rsyslog 서버로 출력하도록 하려면 /etc/rsyslog.conf 파일을 편집하고 다음 줄 중 하나를 추가하십시오:
*. * @IP_REMOTE_RSYSLOG_SERVER:514*. * @FQDN_RSYSLOG_SERVER:514이 줄은 Rsyslog 서비스가 UDP 포트 514에서 원거리 Rsyslog 서버에 모든 내부 로그를 출력하도록 활성화합니다.
TCP 프로토콜을 통해 로그를 전송하려면 다음 템플릿을 사용하십시오:
*. * @@IP_reomte_syslog_server:514모든 우선 순위의 크론 관련 로그만 rsyslog 서버로 출력하려면 아래 템플릿을 사용하십시오:
cron.* @ IP_reomte_syslog_server:514Rsyslog 서버에 네트워크를 통해 접근할 수 없는 경우, 클라이언트 측의 /etc/rsyslog.conf 파일에 아래 줄을 추가하여 서버가 온라인 상태가 될 때까지 로그를 디스크 버퍼 파일에 임시로 저장하십시오.
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1위의 규칙을 적용하려면 Rsyslog 데몬을 재시작해야 클라이언트로 작동할 수 있습니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.