본문 바로가기
서버구축 (WEB,DB)

Rsyslog 사용하여 다양한 로그 수집 및 유형별 분리 저장

by 날으는물고기 2024. 8. 21.

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를 사용하여 원격 시스템으로부터 로그를 수집할 수 있습니다. 이를 위해 imudpimtcp 모듈을 사용할 수 있습니다.

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 공식 문서를 참조하여 더 많은 변수를 확인할 수 있습니다.

템플릿을 사용하여 파일명 정의하기

템플릿을 사용하여 파일명을 정의할 때, 변수들을 사용하여 동적으로 파일명을 생성할 수 있습니다. 예를 들어, 호스트 이름에 따라 로그 파일을 분리하여 저장할 수 있습니다.

템플릿 예제

각 호스트 별로 로그 파일을 분리하여 저장하는 예제입니다.

  1. 템플릿 정의: /etc/rsyslog.conf 파일에 템플릿을 정의합니다.
    $template PerHostLog, "/var/log/%hostname%/%programname%.log"
  2. 규칙 설정: 정의한 템플릿을 사용하여 로그 파일을 저장하는 규칙을 설정합니다.
    *.* ?PerHostLog

위의 설정은 모든 로그 메시지를 수신 호스트의 이름과 프로그램 이름에 따라 파일에 저장하도록 합니다.

유입되는 소스 호스트에 따라 유형을 분리하는 방법

여러 호스트로부터 유입되는 로그를 소스 호스트와 유형에 따라 분리하여 저장할 수 있습니다. 예를 들어, 각 호스트에서 수신되는 auth 로그와 mail 로그를 별도의 파일에 저장하는 설정입니다.

설정 예제

  1. 템플릿 정의: /etc/rsyslog.conf 파일에 템플릿을 정의합니다.
    $template AuthLog, "/var/log/%hostname%/auth.log" $template MailLog, "/var/log/%hostname%/mail.log"
  2. 규칙 설정: 로그 유형별로 템플릿을 사용하여 로그 파일을 저장하는 규칙을 설정합니다.
    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 조건을 사용한 설정 예제

  1. 템플릿 정의: /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"
  2. 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.1192.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 설정

$WorkDirectoryrsyslog의 작업 디렉토리를 지정합니다. 이 디렉토리는 큐 파일, 스풀 파일, 상태 파일 등을 저장하는 데 사용됩니다.

$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의 기능을 최대한 활용할 수 있습니다.

728x90

댓글