Rsyslog 사용하여 다양한 로그 수집 및 유형별 분리 저장
rsyslog를 사용하여 로그를 유형에 따라 분리하여 저장하는 것은 로그 관리를 용이하게 하고 필요한 정보를 신속하게 찾는 데 도움이 됩니다. 여기서는 대표적인 로그 유형(예: auth, mail, cron, kern) 별로 로그를 분리하는 방법을 설명하겠습니다.
1. rsyslog 설치 확인
rsyslog가 설치되어 있는지 확인합니다. 설치되어 있지 않다면 설치합니다.
sudo apt-get update
sudo apt-get install rsyslog
2. rsyslog 구성 파일 수정
rsyslog의 구성 파일을 수정하여 로그를 유형별로 분리합니다. 일반적으로 /etc/rsyslog.conf
파일을 수정합니다.
2.1. /etc/rsyslog.conf 파일 열기
sudo nano /etc/rsyslog.conf
2.2. 로그 유형별 파일 설정 추가
파일 맨 아래에 다음과 같은 설정을 추가합니다. 이는 각 로그 유형별로 다른 파일에 저장하도록 합니다.
# Authentication logs
auth,authpriv.* /var/log/auth.log
# Mail logs
mail.* /var/log/mail.log
# Cron logs
cron.* /var/log/cron.log
# Kernel logs
kern.* /var/log/kern.log
# Default log (everything else)
*.info;mail.none;authpriv.none;cron.none;kern.none /var/log/messages
3. 디렉토리 및 파일 권한 설정
로그 파일이 저장될 디렉토리 및 파일의 권한을 설정합니다. 일반적으로 /var/log
디렉토리를 사용합니다.
sudo touch /var/log/auth.log
sudo touch /var/log/mail.log
sudo touch /var/log/cron.log
sudo touch /var/log/kern.log
sudo chmod 640 /var/log/auth.log
sudo chmod 640 /var/log/mail.log
sudo chmod 640 /var/log/cron.log
sudo chmod 640 /var/log/kern.log
sudo chown syslog:adm /var/log/auth.log
sudo chown syslog:adm /var/log/mail.log
sudo chown syslog:adm /var/log/cron.log
sudo chown syslog:adm /var/log/kern.log
4. rsyslog 서비스 재시작
구성 파일을 수정한 후 rsyslog 서비스를 재시작하여 변경 사항을 적용합니다.
sudo systemctl restart rsyslog
5. 설정 확인
로그가 제대로 분리되어 저장되는지 확인합니다. 로그 파일에 새로운 로그가 기록되는지 확인하여 설정이 올바르게 적용되었는지 검증합니다.
tail -f /var/log/auth.log
tail -f /var/log/mail.log
tail -f /var/log/cron.log
tail -f /var/log/kern.log
참고 사항
- 필요에 따라 다른 로그 유형도 추가로 분리하여 저장할 수 있습니다.
- 각 로그 파일의 보존 기간을 설정하여 주기적으로 오래된 로그를 삭제하거나 아카이브할 수 있습니다.
- 보안상의 이유로 로그 파일의 접근 권한을 적절하게 설정하는 것이 중요합니다.
이와 같이 구성하면 rsyslog를 통해 다양한 로그 유형을 별도의 파일로 분리하여 보관할 수 있습니다. 고급 기능을 활용하여 로그 관리를 더 효율적으로 할 수 있습니다. 제공된 모듈을 통해 imjournal
모듈 사용, UDP 및 TCP를 통한 원격 로그 수집, 그리고 권한 설정 등의 고급 기능을 설정하는 방법을 설명드리겠습니다.
1. imjournal 모듈 사용
imjournal
모듈을 사용하면 systemd
저널에 접근하여 로그를 수집할 수 있습니다. 이는 imuxsock
모듈 대신 사용되며, 더 많은 로그 정보를 제공합니다.
$ModLoad imjournal # provides access to the systemd journal
$ModLoad imklog # reads kernel messages (the same are read from journald)
$ModLoad immark # provides --MARK-- message capability
imjournal 모듈의 추가 설정
imjournal
모듈의 설정을 통해 저널 로그의 위치와 크기 등을 설정할 수 있습니다.
$ModLoad imjournal
$IMJournalStateFile imjournal.state # 상태 파일 경로 설정
$IMJournalPersistStateInterval 5 # 상태 저장 주기(초 단위)
2. 원격 로그 수집 설정 (UDP 및 TCP)
rsyslog
를 사용하여 원격 시스템으로부터 로그를 수집할 수 있습니다. 이를 위해 imudp
및 imtcp
모듈을 사용할 수 있습니다.
UDP 로그 수집
$ModLoad imudp
$UDPServerRun 514
TCP 로그 수집
$ModLoad imtcp
$InputTCPServerRun 2514
3. 권한 설정
로그 파일의 소유자 및 권한을 설정하여 보안성을 강화할 수 있습니다. 주석 처리된 설정을 활성화하여 로그 파일의 소유자와 그룹을 설정할 수 있습니다.
$FileOwner syslog
$FileGroup syslog
$PrivDropToUser syslog
$PrivDropToGroup syslog
4. 고급 필터링 및 포맷팅
rsyslog
는 다양한 필터링 및 포맷팅 기능을 제공합니다. 예를 들어, 특정 우선순위 이상의 로그만 파일에 기록하거나, 로그 메시지의 포맷을 변경할 수 있습니다.
특정 우선순위 이상의 로그 기록
auth
로그 중 warning
이상의 로그만 기록하도록 설정할 수 있습니다.
auth.warn /var/log/auth_warning.log
로그 메시지 포맷 변경
로그 메시지의 포맷을 변경하여 더 읽기 쉽게 만들 수 있습니다.
$template CustomFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\n"
*.* /var/log/custom.log;CustomFormat
5. 로그 압축 및 회전
로그 파일이 너무 커지지 않도록 주기적으로 압축 및 회전할 수 있습니다. 이를 위해 logrotate와 같은 도구를 사용할 수 있습니다. logrotate
설정 파일은 /etc/logrotate.d/rsyslog
에 위치할 수 있습니다.
/var/log/auth.log /var/log/mail.log /var/log/cron.log /var/log/kern.log {
rotate 7
daily
compress
missingok
notifempty
create 0640 syslog adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
6. 모듈 구성 요약
최종적으로, /etc/rsyslog.conf
에 다음과 같이 설정할 수 있습니다.
# Load necessary modules
$ModLoad imjournal
$ModLoad imklog
$ModLoad immark
# Enable UDP and TCP syslog reception
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 2514
# Set file ownership and permissions
$FileOwner syslog
$FileGroup syslog
$PrivDropToUser syslog
$PrivDropToGroup syslog
# Custom log formats and filters
$template CustomFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\n"
*.* /var/log/custom.log;CustomFormat
# Auth log settings
auth.warn /var/log/auth_warning.log
이와 같은 설정을 통해 rsyslog의 다양한 고급 기능을 활용하여 로그 관리를 효율적으로 할 수 있습니다. 필요한 경우 각 모듈의 문서를 참조하여 추가적인 세부 설정을 할 수도 있습니다.
추가적으로, rsyslog의 $template
기능을 사용하면 로그 메시지를 저장할 때 사용할 파일명과 로그 메시지의 형식을 유연하게 정의할 수 있습니다. 이 기능을 활용하여 다양한 환경변수들을 파일명에 포함시킬 수 있고, 유입되는 소스 호스트에 따라 로그를 분리하여 저장할 수 있습니다.
환경변수 목록
rsyslog에서 사용할 수 있는 주요 환경변수는 다음과 같습니다.
%timegenerated%
: 메시지가 생성된 시간%timereported%
: 메시지가 보고된 시간%hostname%
: 메시지를 생성한 호스트의 이름%syslogtag%
: 메시지의 태그 (프로그램 이름)%programname%
: 프로그램 이름%pri%
: 메시지의 우선순위%msg%
: 실제 로그 메시지%protocol-version%
: 프로토콜 버전%structured-data%
: 구조화된 데이터%fromhost%
: 메시지를 보낸 호스트의 이름%fromhost-ip%
: 메시지를 보낸 호스트의 IP 주소%syslogfacility%
: syslog facility%syslogseverity%
: syslog severity%syslogpriority%
: syslog priority%inputname%
: 입력 모듈의 이름%$!all-json%
: JSON 형식으로 구조화된 데이터
이 외에도 다양한 환경변수를 사용할 수 있으며, rsyslog 공식 문서를 참조하여 더 많은 변수를 확인할 수 있습니다.
템플릿을 사용하여 파일명 정의하기
템플릿을 사용하여 파일명을 정의할 때, 변수들을 사용하여 동적으로 파일명을 생성할 수 있습니다. 예를 들어, 호스트 이름에 따라 로그 파일을 분리하여 저장할 수 있습니다.
템플릿 예제
각 호스트 별로 로그 파일을 분리하여 저장하는 예제입니다.
- 템플릿 정의:
/etc/rsyslog.conf
파일에 템플릿을 정의합니다.$template PerHostLog, "/var/log/%hostname%/%programname%.log"
- 규칙 설정: 정의한 템플릿을 사용하여 로그 파일을 저장하는 규칙을 설정합니다.
*.* ?PerHostLog
위의 설정은 모든 로그 메시지를 수신 호스트의 이름과 프로그램 이름에 따라 파일에 저장하도록 합니다.
유입되는 소스 호스트에 따라 유형을 분리하는 방법
여러 호스트로부터 유입되는 로그를 소스 호스트와 유형에 따라 분리하여 저장할 수 있습니다. 예를 들어, 각 호스트에서 수신되는 auth
로그와 mail
로그를 별도의 파일에 저장하는 설정입니다.
설정 예제
- 템플릿 정의:
/etc/rsyslog.conf
파일에 템플릿을 정의합니다.$template AuthLog, "/var/log/%hostname%/auth.log" $template MailLog, "/var/log/%hostname%/mail.log"
- 규칙 설정: 로그 유형별로 템플릿을 사용하여 로그 파일을 저장하는 규칙을 설정합니다.
auth.* ?AuthLog mail.* ?MailLog
위의 설정은 각 호스트로부터 수신된 auth
로그와 mail
로그를 별도의 파일에 저장합니다.
파일 생성 및 권한 설정
로그 파일이 저장될 디렉토리의 권한을 설정합니다. 예를 들어, /var/log
디렉토리 아래에 호스트별 디렉토리를 생성하고 권한을 설정합니다.
sudo mkdir /var/log/hostname1
sudo mkdir /var/log/hostname2
sudo chown syslog:adm /var/log/hostname1
sudo chown syslog:adm /var/log/hostname2
sudo chmod 750 /var/log/hostname1
sudo chmod 750 /var/log/hostname2
예제 설정 파일
# Load necessary modules
$ModLoad imjournal
$ModLoad imklog
$ModLoad immark
# Enable UDP and TCP syslog reception
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 2514
# Set file ownership and permissions
$FileOwner syslog
$FileGroup syslog
$PrivDropToUser syslog
$PrivDropToGroup syslog
# Define templates for log files
$template AuthLog, "/var/log/%hostname%/auth.log"
$template MailLog, "/var/log/%hostname%/mail.log"
# Log rules for different types
auth.* ?AuthLog
mail.* ?MailLog
이 설정을 통해 여러 호스트로부터 수신된 로그를 유형별로 분리하여 저장할 수 있습니다. 필요한 경우, 다른 로그 유형에 대해서도 유사한 템플릿을 정의하여 파일을 분리할 수 있습니다.
특정 호스트에 따라 로그를 구분하여 저장하려면 rsyslog
에서 if
조건을 사용하여 템플릿을 적용할 수 있습니다. 이를 통해 특정 호스트의 로그를 분리하여 저장할 수 있습니다.
if 조건을 사용한 설정 예제
- 템플릿 정의:
/etc/rsyslog.conf
파일에 필요한 템플릿을 정의합니다.$template Host1AuthLog, "/var/log/host1/auth.log" $template Host1MailLog, "/var/log/host1/mail.log" $template Host2AuthLog, "/var/log/host2/auth.log" $template Host2MailLog, "/var/log/host2/mail.log"
- if 조건을 사용한 규칙 설정: 특정 호스트에 따라 로그를 분리하여 저장하는 규칙을 설정합니다.
if $fromhost-ip == '192.168.1.1' then { auth.* ?Host1AuthLog mail.* ?Host1MailLog } else if $fromhost-ip == '192.168.1.2' then { auth.* ?Host2AuthLog mail.* ?Host2MailLog }
위의 설정은 192.168.1.1
IP를 가진 호스트의 auth
로그와 mail
로그를 각각 /var/log/host1/auth.log
및 /var/log/host1/mail.log
에 저장하고, 192.168.1.2
IP를 가진 호스트의 auth
로그와 mail
로그를 각각 /var/log/host2/auth.log
및 /var/log/host2/mail.log
에 저장합니다.
더 많은 호스트와 로그 유형을 처리하는 방법
호스트와 로그 유형이 더 많다면, 동일한 패턴을 확장하여 적용할 수 있습니다.
$template Host1AuthLog, "/var/log/host1/auth.log"
$template Host1MailLog, "/var/log/host1/mail.log"
$template Host1CronLog, "/var/log/host1/cron.log"
$template Host2AuthLog, "/var/log/host2/auth.log"
$template Host2MailLog, "/var/log/host2/mail.log"
$template Host2CronLog, "/var/log/host2/cron.log"
if $fromhost-ip == '192.168.1.1' then {
auth.* ?Host1AuthLog
mail.* ?Host1MailLog
cron.* ?Host1CronLog
}
else if $fromhost-ip == '192.168.1.2' then {
auth.* ?Host2AuthLog
mail.* ?Host2MailLog
cron.* ?Host2CronLog
}
이 설정은 192.168.1.1
과 192.168.1.2
IP를 가진 호스트의 auth
, mail
, cron
로그를 각기 다른 파일에 저장합니다.
디렉토리 및 파일 권한 설정
로그 파일이 저장될 디렉토리의 권한을 설정합니다. 예를 들어, /var/log
디렉토리 아래에 호스트별 디렉토리를 생성하고 권한을 설정합니다.
sudo mkdir -p /var/log/host1
sudo mkdir -p /var/log/host2
sudo chown syslog:adm /var/log/host1
sudo chown syslog:adm /var/log/host2
sudo chmod 750 /var/log/host1
sudo chmod 750 /var/log/host2
종합적인 설정 파일 예제
최종적으로 /etc/rsyslog.conf
에 다음과 같이 설정할 수 있습니다.
# Load necessary modules
$ModLoad imjournal
$ModLoad imklog
$ModLoad immark
# Enable UDP and TCP syslog reception
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 2514
# Set file ownership and permissions
$FileOwner syslog
$FileGroup syslog
$PrivDropToUser syslog
$PrivDropToGroup syslog
# Define templates for log files
$template Host1AuthLog, "/var/log/host1/auth.log"
$template Host1MailLog, "/var/log/host1/mail.log"
$template Host1CronLog, "/var/log/host1/cron.log"
$template Host2AuthLog, "/var/log/host2/auth.log"
$template Host2MailLog, "/var/log/host2/mail.log"
$template Host2CronLog, "/var/log/host2/cron.log"
# Log rules for different hosts
if $fromhost-ip == '192.168.1.1' then {
auth.* ?Host1AuthLog
mail.* ?Host1MailLog
cron.* ?Host1CronLog
}
else if $fromhost-ip == '192.168.1.2' then {
auth.* ?Host2AuthLog
mail.* ?Host2MailLog
cron.* ?Host2CronLog
}
이와 같이 설정하면, 특정 호스트에서 유입되는 로그를 if 조건을 통해 분리하여 저장할 수 있습니다. 필요한 경우, 더 많은 호스트와 로그 유형을 추가하여 확장할 수 있습니다.
rsyslog
에서 global
설정 옵션은 여러 가지 중요한 기능과 동작 방식을 정의하는 데 사용됩니다. 그 중에서도 WorkDirectory
설정은 보조 파일(예: 상태 파일, 큐 파일 등)의 위치를 지정하는 데 사용됩니다.
1. $WorkDirectory 설정
$WorkDirectory
는 rsyslog
의 작업 디렉토리를 지정합니다. 이 디렉토리는 큐 파일, 스풀 파일, 상태 파일 등을 저장하는 데 사용됩니다.
$WorkDirectory /var/spool/rsyslog
위 설정은 rsyslog가 보조 파일을 /var/spool/rsyslog
디렉토리에 저장하도록 지정합니다. 이 디렉토리는 반드시 존재해야 하며, rsyslog가 읽고 쓸 수 있도록 적절한 권한을 가져야 합니다.
2. 글로벌 설정 옵션들
rsyslog
에서 사용할 수 있는 다른 글로벌 설정 옵션들을 살펴보겠습니다.
2.1. $ActionFileDefaultTemplate
로그 메시지를 파일에 저장할 때 기본적으로 사용할 템플릿을 지정합니다.
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
위 설정은 기본 파일 출력 템플릿으로 RSYSLOG_TraditionalFileFormat
을 사용하도록 합니다.
2.2. $RepeatedMsgReduction
같은 메시지가 반복될 경우, 메시지를 축약하여 저장할지 여부를 설정합니다.
$RepeatedMsgReduction on
위 설정은 같은 메시지가 반복될 경우 메시지를 축약하여 저장하도록 합니다.
2.3. $DirCreateMode
새로 생성되는 디렉토리의 기본 권한을 설정합니다.
$DirCreateMode 0755
위 설정은 새로 생성되는 디렉토리의 권한을 0755
로 설정합니다.
2.4. $FileCreateMode
새로 생성되는 파일의 기본 권한을 설정합니다.
$FileCreateMode 0640
위 설정은 새로 생성되는 파일의 권한을 0640
으로 설정합니다.
2.5. $Umask
rsyslog 프로세스에 대해 적용할 umask를 설정합니다.
$Umask 0022
위 설정은 rsyslog 프로세스에 대해 0022
umask를 적용합니다.
2.6. $MaxMessageSize
처리할 수 있는 최대 메시지 크기를 설정합니다.
$MaxMessageSize 64k
위 설정은 최대 메시지 크기를 64k
로 설정합니다.
설정 파일 예제
다양한 글로벌 설정 옵션을 종합하여 /etc/rsyslog.conf
파일에 적용한 예제입니다.
# Global settings
$WorkDirectory /var/spool/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$RepeatedMsgReduction on
$DirCreateMode 0755
$FileCreateMode 0640
$Umask 0022
$MaxMessageSize 64k
# Load necessary modules
$ModLoad imjournal
$ModLoad imklog
$ModLoad immark
# Enable UDP and TCP syslog reception
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 2514
# Set file ownership and permissions
$FileOwner syslog
$FileGroup syslog
$PrivDropToUser syslog
$PrivDropToGroup syslog
# Define templates for log files
$template Host1AuthLog, "/var/log/host1/auth.log"
$template Host1MailLog, "/var/log/host1/mail.log"
$template Host1CronLog, "/var/log/host1/cron.log"
$template Host2AuthLog, "/var/log/host2/auth.log"
$template Host2MailLog, "/var/log/host2/mail.log"
$template Host2CronLog, "/var/log/host2/cron.log"
# Log rules for different hosts
if $fromhost-ip == '192.168.1.1' then {
auth.* ?Host1AuthLog
mail.* ?Host1MailLog
cron.* ?Host1CronLog
}
else if $fromhost-ip == '192.168.1.2' then {
auth.* ?Host2AuthLog
mail.* ?Host2MailLog
cron.* ?Host2CronLog
}
이 설정 파일은 다양한 글로벌 설정을 포함하여 rsyslog의 동작을 세밀하게 제어합니다. 이를 통해 rsyslog의 기능을 최대한 활용할 수 있습니다.