Rsyslog 설치 · 7 min read · Oct 17, 2025

CentOS 5.x에 전체 기능이 포함된 Rsyslog 5.7.x 설치하기

CentOS 5.x에 전체 기능이 포함된 Rsyslog 5.7.x 설치하기

이 튜토리얼은 Rsyslog를 사용하여 새로운 세대의 syslog 서버를 설치하는 방법을 보여줍니다. Rsyslog 웹사이트(www.rsyslog.com)에 따르면, Rsyslog는 MySQL, PostgreSQL, 장애 조치 로그 목적지, syslog/tcp, 세밀한 출력 형식 제어, 고정밀 타임스탬프, 대기 작업 및 메시지의 모든 부분에 대한 필터링 기능을 지원하는 향상된 syslogd입니다. 기본 sysklogd와 매우 호환되며 드롭인 대체로 사용할 수 있습니다. 고급 기능 덕분에 기업급 암호화 보호 syslog 릴레이 체인에 적합하면서도 초보자가 설정하기 매우 쉽습니다.

목표

이 튜토리얼은 CentOS 5.5 서버에 전체 기능이 포함된 Rsyslog 5.7.9를 컴파일하고 설치하는 방법을 보여줍니다. 이 방법이 귀하에게 효과가 있을 것이라는 보장은 하지 않습니다!

설치 전 준비

먼저 다음 패키지를 설치해야 합니다:

yum install -y pcre pcre-devel mysql-server mysql-devel gnutls gnutls-devel gnutls-utils net-snmp net-snmp-devel net-snmp-libs net-snmp-perl net-snmp-utils libnet libnet-devel

추가 패키지 다운로드:

librelp (신뢰할 수 있는 이벤트 로깅 프로토콜 라이브러리)는 RELP 프로토콜을 위한 사용하기 쉬운 라이브러리입니다. RELP는 네트워크를 통한 신뢰할 수 있는 이벤트 로깅을 제공합니다. RELP(따라서) librelp는 연결이 끊기고 피어가 사용할 수 없게 되더라도 메시지가 손실되지 않도록 보장합니다. RELP는 범용 확장 가능한 로깅 프로토콜임을 유의하십시오. rsyslog-to-rsyslog 통신의 긴급한 필요를 해결하기 위해 설계되었지만, RELP는 훨씬 더 많은 애플리케이션을 지원합니다.

cd /tmp
wget http://sourceforge.net/projects/libestr/files/libestr-0.1.0.tar.gz/download
tar -xvf libestr-0.1.0.tar.gz
cd libestr-0.1.0
./configure –prefix=/usr
make
make install

cd /tmp
wget http://www.libee.org/files/download/libee-0.1.0.tar.gz
tar -xvf libee-0.1.0.tar.gz
cd libee-0.1.0
./configure –prefix=/usr
make
make install

cd /tmp
wget http://honeynet.ir/software/rsyslog/librelp-1.0.0.tar.gz
tar -xvf librelp-1.0.0.tar.gz
cd librelp-1.0.0
./configure –prefix=/usr
make
make install

Rsyslog 패키지 다운로드:

이 튜토리얼을 작성할 당시, rsyslog 5.7.9가 필요한 대부분의 좋은 기능을 지원하는 Rsyslog의 최상의 버전이라고 생각합니다.

cd /tmp
wget http://www.rsyslog.com/files/download/rsyslog/rsyslog-5.7.9.tar.gz
tar -xvf rsyslog-5.7.9.tar.gz
cd rsyslog-5.7.9

Rsyslog 컴파일 및 설치:

Rsyslog에서 사용할 수 있는 옵션에 대한 자세한 정보는 ./configure –help를 실행하면 확인할 수 있습니다.

다음 명령은 압축, 멀티스레딩, MySql, SNMP, 메일, RELP 지원 등과 같은 대부분의 rsyslog 기능을 활성화합니다.

./configure –enable-regexp –enable-zlib –enable-pthreads –enable-klog –enable-inet –enable-unlimited-select –enable-debug –enable-rtinst –enable-memcheck –enable-diagtools –enable-mysql –enable-snmp –enable-gnutls –enable-rsyslogrt –enable-rsyslogd –enable-extended-tests –enable-mail –enable-imptcp –enable-omruleset –enable-valgrind –enable-imdiag –enable-relp –enable-testbench –enable-imfile –enable-omstdout –enable-omdbalerting –enable-omuxsock –enable-imtemplate –enable-omtemplate –enable-pmlastmsg –enable-omudpspoof –enable-omprog –enable-impstats
make
make install

MySQL 데이터베이스 준비:

syslog 기록을 데이터베이스에 저장하려면 MySQL 설치가 필수입니다. 그렇지 않으면 이 부분을 건너뛰십시오.

mysql -u root -p < plugins/ommysql/createDB.sql
mysql -u root -p mysql
GRANT ALL ON Syslog.* TO rsyslog@localhost IDENTIFIED BY ‘your-mysql-password’;
flush privileges;

init 스크립트 구성

vi /etc/init.d/rsyslog

#!/bin/bash
#
# rsyslog        Starts rsyslogd/rklogd.
#
#
# chkconfig: - 12 88
# description: Syslog is the facility by which many daemons use to log \
# messages to various system log files.  It is a good idea to always \
# run rsyslog.
### BEGIN INIT INFO
# Provides: $syslog
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Enhanced system logging and kernel message trapping daemons
# Description: Rsyslog is an enhanced multi-threaded syslogd supporting, 
#              among others, MySQL, syslog/tcp, RFC 3195, permitted 
#              sender lists, filtering on any message part, and fine 
#              grain output format control.
### END INIT INFO

# Source function library.
. /etc/init.d/functions

RETVAL=0

start() {
        [ -x /usr/local/sbin/rsyslogd ] || exit 5
        #[ -x /usr/local/sbin/rklogd ] || exit 5

        # Do not start rsyslog when sysklogd is running
        if [ -e /var/run/syslogd.pid ] ; then
                echo "$Shut down sysklogd before you run rsyslog";
                exit 1;
        fi

        # Source config
        if [ -f /etc/sysconfig/rsyslog ] ; then
                . /etc/sysconfig/rsyslog
        else
                #SYSLOGD_OPTIONS="-c3"
                SYSLOGD_OPTIONS="-c5"
                #KLOGD_OPTIONS="-2"
        fi

        if [ -z "$SYSLOG_UMASK" ] ; then
              SYSLOG_UMASK=077;
        fi
        umask $SYSLOG_UMASK

        echo -n "$Starting system logger: "
        daemon /usr/local/sbin/rsyslogd $SYSLOGD_OPTIONS
        RETVAL=$?
        echo
        #echo -n "$Starting kernel logger: "
        #daemon rklogd $KLOGD_OPTIONS
        #echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog
        return $RETVAL
}
stop() {
        #echo -n "$Shutting down kernel logger: "
        #killproc rklogd
        #echo
        echo -n "$Shutting down system logger: "
        killproc rsyslogd
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog
        return $RETVAL
}
reload()  {
    RETVAL=1
    syslog=`cat /var/run/rsyslogd.pid 2>/dev/null`
    echo -n "Reloading system logger..."
    if [ -n "${syslog}" ] && [ -e /proc/"${syslog}" ]; then
        kill -HUP "$syslog";
        RETVAL=$?
    fi
    if [ $RETVAL -ne 0 ]; then
        failure
    else
        success
    fi
    echo
    RETVAL=1
    #echo -n "Reloading kernel logger..."
    #klog=`cat /var/run/rklogd.pid 2>/dev/null`
    #if [ -n "${klog}" ] && [ -e /proc/"${klog}" ]; then
        #kill -USR2 "$klog";
    #    RETVAL=$?
    #fi
    #if [ $RETVAL -ne 0 ]; then
        #failure
    #else
        #success
    #fi
    #echo    
    return $RETVAL
}
rhstatus() {
        status rsyslogd
        #status rklogd
}
restart() {
        stop
        start
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload|force-reload)
        reload
        ;;
  status)
        rhstatus
        ;;
  condrestart)
        [ -f /var/lock/subsys/rsyslog ] && restart || :
        ;;
  *)
        echo "$Usage: $0 {start|stop|restart|reload|force-reload|condrestart}"
        exit 2
esac

exit $?

참고: SYSLOGD_OPTIONS=”-c5”가 설정되어 있는지 확인하십시오!

Syslog 및 Rsyslog 구성:

service syslog stop
chkconfig syslog off
chmod 755 /etc/init.d/rsyslog
chkconfig –add rsyslog
chkconfig rsyslog on

init 스크립트는 이란 호넷넷 프로젝트 - Rsyslog에서 다운로드할 수 있습니다.

Rsyslog 구성

기능을 개략적으로 설명하는 일부 구성은 Rsyslog.com 웹사이트에서 확인할 수 있습니다.

vi /etc/rsyslog.conf

# Input Modules -----------------------------------이 줄은 주석입니다
#--------------------------------------------------이 줄은 주석입니다
$ModLoad impstats.so
$PStatsInterval 300
syslog.info  /var/log/rsyslog-stats
#--------------------------------------------------이 줄은 주석입니다
$ModLoad immark.so      # --MARK-- 메시지 기능 제공
$ModLoad imuxsock.so    # 로컬 시스템 로깅 지원 제공 (logger 명령을 통해)
$ModLoad imklog.so      # 커널 로깅 지원 제공 (이전에는 rklogd에 의해 수행됨)
#--------------------------------------------------이 줄은 주석입니다
$ModLoad imudp.so       # UDP syslog 수신 제공
$UDPServerAddress *     # 모든 로컬 인터페이스
$UDPServerRun 514       # UDP 서버 시작 (로그 서버 수신기)
#--------------------------------------------------이 줄은 주석입니다
$ModLoad imtcp.so       # TCP syslog 수신 및 GSS-API 제공 (컴파일된 경우)
$InputTCPServerRun 514  # TCP 서버 시작 (로그 서버 수신기)
#--------------------------------------------------이 줄은 주석입니다
$ModLoad imrelp.so      # RELP 입력
$InputRELPServerRun 20514 # RELP 프로토콜 시작
#--------------------------------------------------이 줄은 주석입니다
$ModLoad imfile.so      # 텍스트 파일 입력
$InputFileName /var/log/i-am-a-text-file.log
$InputFileTag my-text-file:
$InputFileStateFile stat-file1
$InputFileSeverity error
$InputFileFacility local7
$InputFilePollInterval 10 # 매 10초마다 새 줄 확인
$InputRunFileMonitor
#--------------------------------------------------이 줄은 주석입니다
#$ModLoad imgssapi.so   # 일반 TCP 및 GSSAPI
#$ModLoad im1395.so     # RFC1395를 통한 메시지

# Output Modules ----------------------------------이 줄은 주석입니다
#--------------------------------------------------이 줄은 주석입니다
$ModLoad omsnmp.so      # SNMP 트랩 전송
#$actionsnmptransport udp
#$actionsnmptarget 192.168.x.x
#$actionsnmptargetport 162
#$actionsnmpversion 1
#$actionsnmpcommunity public
#*.* :omsnmp:
#--------------------------------------------------이 줄은 주석입니다
$ModLoad ommysql.so     # MySQL에 로그 기록
#$ModLoad ompgsql.so    # PostgreSQL에 로그 기록
#--------------------------------------------------이 줄은 주석입니다
$ModLoad ommail.so      # 메일 전송
#$ActionMailSMTPServer mail.example.net
#$ActionMailFrom [email protected]
#$ActionMailTo [email protected]
#$ActionMailTo [email protected]
#$template mailSubject,"disk problem on %hostname%"
#$template mailBody,"RSYSLOG Alert\r\nmsg='%msg%'"
#$ActionMailSubject mailSubject
#$ActionExecOnlyOnceEveryInterval 21600
#if $msg contains 'hard disk fatal failure' then :ommail:;mailBody
#--------------------------------------------------이 줄은 주석입니다
$ModLoad omrelp.so      # RELP를 통해 다른 호스트로 전송
#$ModLoad omlibdbi.so   # 일반 DB 출력을 통한 로그 기록
#$ModLoad omgss.so      # GSS 지원 출력

# Globals -----------------------------------------이 줄은 주석입니다
$umask 0000
$DirCreateMode 0640
$FileCreateMode 0640
$RepeatedMsgReduction on

$WorkDirectory /var/log/rsyslog  # 작업(스풀) 파일의 기본 위치
$ActionQueueType LinkedList      # 비동기 처리 사용
$ActionQueueFileName queue       # 파일 이름 설정, 디스크 모드도 활성화
$ActionResumeRetryCount -1       # 삽입 실패 시 무한 재시도
$ActionQueueSaveOnShutdown on    # rsyslog가 종료될 때 메모리 내 데이터 저장
$MainMsgQueueMaxFileSize 100M  
$ActionQueueMaxFileSize 5M     

#--------------------------------------------------이 줄은 주석입니다
# 아래에서 템플릿이 수행할 수 있는 샘플을 찾으십시오. 즐거운 시간 되세요
# 그들이 무엇을 하는지 알아보세요 [또는 그냥 조정하세요] ;)

# 전통적인 syslogd 파일 출력을 닮은 템플릿:
$template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"

# 형식 문제 디버깅에 유용한 템플릿
$template DEBUG,"Debug line with all properties:\nFROMHOST: '%FROMHOST%', HOSTNAME: '%HOSTNAME%', PRI: %PRI%,\nsyslogtag '%syslogtag%', programname: '%programname%', APP-NAME: '%APP-NAME%', PROCID: '%PROCID%', MSGID: '%MSGID%',\nTIMESTAMP: '%TIMESTAMP%', STRUCTURED-DATA: '%STRUCTURED-DATA%',\nmsg: '%msg%'\nescaped msg: '%msg:::drop-cc%'\nrawmsg: '%rawmsg%'\n\n"

# RFC 3164의 온도 형식을 닮은 템플릿:
# (예, syslogtag와 msg 사이에 공백이 없습니다! 중요합니다!)
$template RFC3164fmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%"

# 전통적인 벽 메시지 형식을 닮은 템플릿:
$template wallmsg,"\r\n\7Message from syslogd@%HOSTNAME% at %timegenerated% ...\r\n %syslogtag%%msg%\n\r"

# 아래 템플릿은 winsyslog 형식을 에뮬레이트하지만, 사용된 타임스탬프를 확인해야 합니다.
# 지금은 충분히 좋습니다 ;) 이 형식은 MonitorWare 제품군의 다른 구성원과 가장 잘 작동합니다. 또한
# 속성 교체기가 작동하는 것을 볼 수 있는 좋은 샘플입니다.
$template WinSyslogFmt,"%HOSTNAME%,%timegenerated:1:10:date-rfc3339%,%timegenerated:12:19:date-rfc3339%,%timegenerated:1:10:date-rfc3339%,%timegenerated:12:19:date-rfc3339%,%syslogfacility%,%syslogpriority%,%syslogtag%%msg%\n"

# 데이터베이스 쓰기에 사용되는 템플릿 (실제 sql 문장임을 주목하십시오):
$template dbFormat,"insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%',%syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",sql

$template FileFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"

$template ForwardFormat,"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"

# 선택기 라인은 기본 syslogd와 다소 다릅니다. rsyslog를 사용하면
# 대상 뒤에 세미콜론 ";"를 추가한 다음 템플릿 이름을 추가할 수 있습니다. 그러면
# 이 템플릿이 해당 작업에 할당됩니다. 템플릿 이름이 제공되지 않으면 하드코딩된 템플릿이 사용됩니다.
# 템플릿 이름이 제공되지만 템플릿이 정의되지 않은 경우 선택기 라인은 비활성화됩니다.
#--------------------------------------------------------------------

#--------------------------------------------------이 줄은 주석입니다
# 최대 압축으로 TCP를 통해 전달:
#$AllowedSender TCP, 127.0.0.1, 192.0.2.0/24, [::1]/128, *.example.net, somehost.example.com
#*.*       @@(z9)192.168.x.x:514
# 최대 압축으로 UDP를 통해 전달:
#$AllowedSender UDP, 127.0.0.1, 192.0.2.0/24, [::1]/128, *.example.net, somehost.example.com
#*.*       @(z9)192.168.x.x:514
# RELP 프로토콜을 통해 전달:
#*.*      :omrelp:192.168.2.4:20514;TraditionalFormat      
# 모든 로그 파일을 MySQL DB에 저장:
#*.*       :ommysql:127.0.0.1,Syslog,rsyslog,your-mysql-password
#--------------------------------------------------이 줄은 주석입니다

#--------------------------------------------------이 줄은 주석입니다
# 모든 커널 메시지를 콘솔에 기록합니다.
# 다른 많은 것을 기록하면 화면이 어지럽혀집니다.
#kern.*                                                 /dev/console;TraditionalFileFormat

# 레벨 정보 이상의 모든 것을 기록합니다.
# 개인 인증 메시지는 기록하지 마십시오!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# authpriv 파일은 제한된 접근을 가집니다.
authpriv.*                                              /var/log/secure

# 모든 메일 메시지를 한 곳에 기록합니다.
mail.*                                                  -/var/log/maillog

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

# 모든 사람에게 긴급 메시지를 보냅니다.
*.emerg                                                 *

# 레벨 크리티컬 이상의 뉴스 오류를 특별한 파일에 저장합니다.
uucp,news.crit                                          /var/log/spooler

# 부팅 메시지도 boot.log에 저장합니다.
local7.*                                                /var/log/boot.log

#--------------------------------------------------이 줄은 주석입니다
$IncludeConfig /etc/rsyslog.d/*.conf

#--------------------------------------------------이 줄은 주석입니다
#if message contains 'network error' then run the restart-network.sh shell script!!!
#:msg, contains, "network error" ^/root/restart-network.sh

중요 참고: 자세한 정보는 Rsyslog.com을 확인하십시오.

Rsyslog 구성 파일은 이란 호넷넷 프로젝트 - Rsyslog에서 다운로드할 수 있습니다.

Rsyslog 시작

chmod 640 /etc/rsyslog.conf
service rsyslog start
tail -f /var/log/messages

Rsyslog 테스트

logger “this is a test message”
logger -p local0.info -t testtag “this is a test message”

링크

이란 호넷넷 프로젝트: http://www.honeynet.ir/
Rsyslog 프로젝트: http://www.rsyslog.com/
CentOS: http://www.centos.org/

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.