안녕하세요. 썬구루입니다. 이 게시물에서는 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