Sunday, March 25, 2018

CentOS 6.6 리눅스 네트워크 ] 3.2 시스템로그 - rsyslogd


안녕하세요. 썬구루입니다. 이 게시물에서는 rsyslogd에 대해 알아보도록 하겠습니다.

rsyslogd는 메시지 로깅을 지원하는 시스템 유틸리티입니다. 이는 유닉스와 리눅스에 사용되면 이전에 사용하던 syslogd의 확장 버전 정도로 생각하면 됩니다. 커널, 데몬, 사용자 프로세스들은 동작 중에 수많은 메시지(보통 로그 또는 로그 메시지라고 함)들을 만들어냅니다.

각 프로그램들마다 메시지를 관리하기에는 어려움(?)이 있기 때문에 일정한 규칙 통해 메시지들을 기록, 관리하기 위해 만든 것이 로그 시스템입니다. CentOS 6 버전에서 사용하는 로그 시스템이 rsyslogd인데 이 게시물에서 이것에 대해 알아봅니다.

■ rsyslogd 란?

rsyslogd는 메시지 로깅을 지원하는 시스템 유틸리티이다. 이것은 시스템 메시지 로깅을 좀 더 체계적으로 관리하기 위해 만들어졌으며 리눅스(Linux)와 유닉스(Unix)에 사용되고 있다. 이것은 syslogd의 확장 버전으로 생각할 수 있다.


커널, 데몬 프로세스, 사용자 프로세스 들은 운영 중에 메시지를 만들어낸다. 간단한 일반 메시지부터 경고 메시지까지. rsyslogd는 메시지(Message)를 생성하는 대상, 위험 수준,  메시지 전달 대상을 가지고 규칙을 만들어낸다. 로컬 시스템(Local System)의 로그 파일에 저장이 될 수 있고 또는 원격지의 로그 서버에  메시지를 전달하여 저장할 수도 있다.

아래와 같은 명령을 통해 rsyslogd 서비스 상태를 알 수 있다.

[root@sunguru etc]# service rsyslog status
rsyslogd (pid  7799)를 실행하고 있습니다..
[root@sunguru etc]#
[root@sunguru etc]# chkconfig --list rsyslog
rsyslog         0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제
[root@sunguru etc]#
[root@sunguru etc]# ps -ef | grep rsyslogd | grep -v grep
root      7799     1  0 Jul13 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
[root@sunguru etc]# 

■ rsyslogd 서비스 시작 / 종료

아래와 같은 명령을 통해 서비스를 시작 또는 종료할 수 있다.

[root@sunguru etc]# ps -ef | grep rsyslogd | grep -v grep
root      7799     1  0 Jul13 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
[root@sunguru etc]#
[root@sunguru etc]# service rsyslog stop
시스템 로거 종료 중:                                       [  OK  ]
[root@sunguru etc]#
[root@sunguru etc]# ps -ef | grep rsyslogd | grep -v grep
[root@sunguru etc]#
[root@sunguru etc]# service rsyslog status
rsyslogd가 정지되었습니다
[root@sunguru etc]#
[root@sunguru etc]# service rsyslog start
시스템 로거 시작 중:                                       [  OK  ]
[root@sunguru etc]#
[root@sunguru etc]# ps -ef | grep rsyslogd | grep -v grep
root     10036     1  0 01:25 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
[root@sunguru etc]#
[root@sunguru etc]# service rsyslog status
rsyslogd (pid  10036)를 실행하고 있습니다..
[root@sunguru etc]# 

■ /etc/rsyslog.conf

이 파일은 rsyslogd 데몬 프로세스의 구성 파일이다. 파일의 주석 기호는 #이다. 그리고 일반적으로 아래와 같은 형식으로 메시지 처리 규칙(Rules)이 설정되어 있다.

FacilityLevel.SecurityLevel   Action

1). Facility Level

Facility는 메시지를 생성하는 대상을 나타낸다. 예를 들면 kern은 커널에 의해 만들어지는 메시지를 나타낸다.

Facility 번호
키워드(Keyword)
설명
 0
 kern
 kernel messages
1
user
 user-level messages
 2
 mail
 mail system
 3
daemon
 system daemons
 4
 auth
 security/authorization messages
 5
 syslog
 messages generated internally by syslogd
 6
 lpr
 line printer subsystem
 7
 news
 network news subsystem
 8
 uucp
 UUCP subsystem
 9
 clock daemon
 10
 authpriv
 security/authorization messages
 11
 ftp
 FTP daemon
 12
 -
 NTP subsystem
 13
 -
 log audit
 14
 -
 log alert
 15
 cron
 clock daemon
 16
 local0
 local use 0 (local0)
 17
 local1
 local use 1 (local1)
 18
 local2
 local use 2 (local2)
 19
 local3
 local use 3 (local3)
 20
 local4
 local use 4 (local4)
 21
 local5
 local use 5 (local5)
 22
 local6
 local use 6 (local6)
 23
 local7
 local use 7 (local7)



2). Security Level

Security는 메시지의 중요도를 나타낸다. 예를 들어 notice는 알림 정도이지만 critical은 보통 하드웨어 오류나 날 때 나타나는 메시지이다.

Code
Security
Keyword
설명
세부 설명
 0
 Emergency
 emerg
시스템 사용
불능
 Panic 상황이며 보통 이런 메시지면 시스템 리부팅이 된다.  메모리 또는 CPU 오류 많이 발생한다.
 1
 Alert
 alert
즉각 조치 필요
 즉각 조치가 필요한 상황을 나타낸다.
 2
 Critical
 crit
 위기 상황
 즉각 조치가 필요한 상황을 나타낸다.
 3
 Error
 err
오류 상황
 긴급 장애는 아니지만 조치가 필요한 상황을 나타낸다. 하드디스크 오류 시 많이 본 메시지이다.
 4
Warning
 warn
경고 상황
 긴급 장애는 아니지만 조치가 필요한 상황을 나타낸다. 파일시스템 사용률이 높으면 많이 본 메시지이다.
 5
Notice
 notice
 정상이지만
알림 상황
 이벤트 정도의 메시지이다. 조치가 필요한 상황이 아니다.
 6
Information
 info
 일반 정보
메시지
 정상 운영 메시지이다. 조치가 필요한 상황이 아니다.
 7
 Debug
 debug
 디버그 레벨 메시지
 응용 프로그램 디버깅을 위해 개발자들에게 유용한 메시지이다.

3). Action

Action은 메시지 전달 목적지를 나타냅니다. 대부분 파일을 설정하며 콘솔이나 원격지 시스템이 설정될 수도 있습니다. 메시지들을 보관한 파일을 로그 파일, 네트워크를 통해 메시지들을 저장, 관리하는 시스템을 로그 서버라고 합니다.

■ /var/log/messages

시스템 주요 메시지 정보가 저장되는 로그 파일이다. 보관 주기 및 파일 개수 설정에 따라 로그 보관 기간이 달라진다.

■ 파일시스템 Full 체크 쉘 스크립트

#!/bin/bash
# Filesystem Full Check Script. fs_full.sh
# Created by sunguru
DATE=`date '+%Y-%m-%d %H:%M:%S'`
df -Ph | awk  '{print $5"\t"$6}' | sed -e 1d | sed -e s/%//g > /tmp/fs.dat
while read INPUT
do
USED=`echo $INPUT | cut -d " " -f 1`
FS=`echo $INPUT | cut -d " " -f 2`
if [ $USED -gt 90 ]; then
        echo "$DATE\t warning. $FS filesystem is ${USED}%"    # >> /var/log/messages
fi
done < /tmp/fs.dat
rm -f /tmp/fs.dat

스크립트 실행 결과

[root@centos66temp ~]# bash fs_full.sh
2016-09-28 12:22:06\t warning. /data01 filesystem is 97%
2016-09-28 12:22:06\t warning. /data02 filesystem is 95%
[root@centos66temp ~]# 

■ /etc/logrotate.conf

logrotate 명령의 설정 파일이다.

logrotate는 시스템 로그 파일을 전환, 압축하기 위해 사용되는 명령이다. 이는 로그 파일이 방대해지는 것을 방지하기 위해 사용하며 cron에 의해 매일 실행된다.

[root@centos64 ~]# ls -l /etc/cron.daily/logrotate
-rwxr-xr-x. 1 root root 196 Aug 16  2012 /etc/cron.daily/logrotate
[root@centos64 ~]#
[root@centos64 ~]# more /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
[root@centos64 ~]#  

아래는 /etc/logrotate.conf 파일의 내용이다. logrotate 명령에 대한 설정 파일이며 로그파일 저장 주기 및 압축 여부 등을 설정할 수 있다.

[root@centos64 ~]# more /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
 minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}
# system-specific logs may be also be configured here.
[root@centos64 ~]#

▶ logrotate.conf 설정 정보

설정 정보
내 용
weekly
 로그 파일을 바꾸는 교체 주기를 나타낸다. 설정값은 daily, weekly, monthly 가 있다.
rotate N
 교체 파일 개수를 설정한다. 로그 파일 교체 주기가 weekly이고 rotate 4라고 되어 있다면 로그는 한 달간(4 Weeks) 보관된다.
create
 지난 로그 파일 교체 후 새 로그 파일을 생성한다.
compress
 로그 파일을 압축한다. 기본값은 비압축

만약 로그 파일 보관 기간을 8주로 변경하고 싶다면 /etc/logrotate.conf 파일 내용을 아래와 같이 변경하면 된다.

 rotate 8

■ logger 명령

이 명령은 /etc/rsyslog.conf 파일의 내용을 변경하였다면 rsyslogd 데몬이 변경한 설정 정보대로 정상적으로 동작하는지 확인하기 위해 사용하는 명령이다. 다시 말해 강제적으로 rsyslogd 데몬에 메시지를 전달하기 위해 사용하는 명령이다.

1). 명령 형식

logger [옵션] [messages]

2). 옵션

옵션
내 용
-i
 메시지에 logger 프로세스의 PID를 남긴다.
-f FILENAME
 파일의 내용을 메시지 내용으로 사용한다.
-p PRIORITY
 메시지의 우선순위를 나타낸다. 즉 Facility.Security를 나타낸다.
-t TAG
 메시지에 TAG를 명시한다. 일반적으로 TAG는 프로세스 이름이다.
messages
 log로 남길 메시지를 나타낸다.

3). 예제

아래는 local0 이 만들어내는 information 중요도 이상의 메시지에 대해 다시 말해 Security Level Code 번호 6번 이하( 6,5,4,3,2,1,0 )에 대한  메시지에 대해 /var/log/local0.log 파일에 로그를 기록하도록 설정 및  logger 명령으로 테스트하는 예이다.

[root@sunguru etc]# echo "local0.info  /var/log/local0.log" >> /etc/rsyslog.conf
[root@sunguru etc]#
[root@sunguru etc]# touch /var/log/local0.log
[root@sunguru etc]#
[root@sunguru etc]# service rsyslog restart
시스템 로거 종료 중:                                       [  OK  ]
시스템 로거 시작 중:                                       [  OK  ]
[root@sunguru etc]#
[root@sunguru etc]# more /var/log/local0.log
[root@sunguru etc]#
[root@sunguru etc]# logger -i -p local0.info -t LOCAL0 "local0 information message"
[root@sunguru etc]#
[root@sunguru etc]# more /var/log/local0.log
Jul 14 05:31:42 centos01 LOCAL0[11366]: local0 information message
[root@sunguru etc]#
[root@sunguru etc]# logger -i -p local0.notice -t LOCAL0 "local0 notice message"
[root@sunguru etc]#
[root@sunguru etc]# more /var/log/local0.log
Jul 14 05:31:42 centos01 LOCAL0[11366]: local0 information message
Jul 14 05:34:04 centos01 LOCAL0[11374]: local0 notice message
[root@sunguru etc]#
[root@sunguru etc]# logger -i -p local0.debug -t LOCAL0 "local0 debug message"
[root@sunguru etc]#
[root@sunguru etc]# more /var/log/local0.log
Jul 14 05:31:42 centos01 LOCAL0[11366]: local0 information message
Jul 14 05:34:04 centos01 LOCAL0[11374]: local0 notice message
[root@sunguru etc]#  

여기까지 rsyslogd에 대해 알아보았습니다. 다음 게시물에서는 리눅스 본딩(Bonding)을 이용한 네트워크 이중화에 대해 알아보도록 하겠습니다.






No comments:

Post a Comment