안녕하세요. 썬구루입니다. 이 게시물에서는 CentOS 7.3 리눅스에서 rsyslogd에 대해 알아보도록 하겠습니다.
rsyslogd는 메시지 로깅을 지원하는 시스템 유틸리티입니다. 이는 유닉스와 리눅스에 사용되면 이전에 사용하던 syslogd의 확장 버전 정도로 생각하면 됩니다. 커널, 데몬, 사용자 프로세스들은 동작 중에 수많은 메시지(보통 로그 또는 로그 메시지라고 함)들을 만들어냅니다.
각 프로그램들마다 메시지를 관리하기에는 어려움(?)이 있기 때문에 일정한 규칙 통해 메시지들을 기록, 관리하기 위해 만든 것이 로그 시스템입니다. CentOS 7.3 버전에서 사용하는 로그 시스템이 rsyslogd인데 이 게시물에서 이것에 대해 알아봅니다.
■ rsyslogd 란?
rsyslogd는 메시지 로깅을 지원하는 시스템 유틸리티이다. 이것은 시스템 메시지 로깅을 좀 더 체계적으로 관리하기 위해 만들어졌으며 리눅스(Linux)와 유닉스(Unix)에 사용되고 있다. 이것은 syslogd 의 확장 버전으로 생각할 수 있다.
커널, 데몬 프로세스, 사용자 프로세스 들은 운영 중에 메시지를 만들어낸다. 간단한 일반 메시지부터 경고 메시지까지. rsyslogd는 메시지(Message)를 생성하는 대상, 위험 수준, 메시지 전달 대상을 가지고 규칙을 만들어낸다. 로컬 시스템(Local System)의 로그 파일에 저장이 될 수 있고 또는 원격지의 로그 서버에 메시지를 전달하여 저장할 수도 있다.
아래와 같은 명령을 통해 rsyslogd 서비스 상태를 알 수 있다.
[root@centos701 ~]# systemctl status rsyslog.service ● rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled) Active: active (running) since 화 2017-01-31 16:38:55 KST; 7h ago Main PID: 8260 (rsyslogd) CGroup: /system.slice/rsyslog.service └─8260 /usr/sbin/rsyslogd -n 1월 31 16:38:55 centos701 systemd[1]: Starting System Logging Service... 1월 31 16:38:55 centos701 systemd[1]: Started System Logging Service. [root@centos701 ~]# [root@centos701 ~]# ps -ef | grep rsyslogd root 8260 1 0 16:38 ? 00:00:00 /usr/sbin/rsyslogd -n root 12568 12501 0 23:57 pts/0 00:00:00 grep --color=auto rsyslogd [root@centos701 ~]# |
■ rsyslogd 서비스 시작 / 종료
아래와 같은 명령을 통해 서비스를 시작 또는 종료할 수 있다.
[root@centos701 ~]# ps -ef | grep rsyslogd | grep -v grep
root 8260 1 0 16:38 ? 00:00:00 /usr/sbin/rsyslogd -n [root@centos701 ~]# [root@centos701 ~]# systemctl stop rsyslog.service [root@centos701 ~]# [root@centos701 ~]# ps -ef | grep rsyslogd | grep -v grep [root@centos701 ~]# [root@centos701 ~]# systemctl status rsyslog.service ● rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled) Active: inactive (dead) since 화 2017-01-31 23:59:09 KST; 27s ago Process: 8260 ExecStart=/usr/sbin/rsyslogd -n $SYSLOGD_OPTIONS (code=exited, status=0/SUCCESS) Main PID: 8260 (code=exited, status=0/SUCCESS) 1월 31 16:38:55 centos701 systemd[1]: Starting System Logging Service... 1월 31 16:38:55 centos701 systemd[1]: Started System Logging Service. 1월 31 23:59:09 centos701 systemd[1]: Stopping System Logging Service... 1월 31 23:59:09 centos701 systemd[1]: Stopped System Logging Service. [root@centos701 ~]# [root@centos701 ~]# systemctl start rsyslog.service [root@centos701 ~]# ps -ef | grep rsyslogd | grep -v grep root 12636 1 0 23:59 ? 00:00:00 /usr/sbin/rsyslogd -n [root@centos701 ~]# |
■ /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@centos701 ~]# bash fs_full.sh
2017-01-30 11:21:06\t warning. /data01 filesystem is 97% 2017-01-30 11:21:06\t warning. /data02 filesystem is 95% [root@centos701 ~]# |
■ /etc/logrotate.conf
logrotate 명령의 설정 파일이다.
logrotate는 시스템 로그 파일을 전환, 압축하기 위해 사용되는 명령이다. 이는 로그파일이 방대해지는 것을 방지하기 위해 사용하며 cron에 의해 매일 실행된다.
[root@centos701 ~]# ls -l /etc/cron.daily/logrotate
-rwx------. 1 root root 219 11월 6 07:55 /etc/cron.daily/logrotate [root@centos701 ~]# more /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 [root@centos701 ~]# |
아래는 /etc/logrotate.conf 파일의 내용이다. logrotate 명령에 대한 설정 파일이며 로그파일 저장 주기 및 압축 여부 등을 설정할 수 있다.
[root@centos701 ~]# 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@centos701 ~]# |
▶ logrotate.conf 설정 정보
설정 정보
|
내 용
|
weekly
| 로그 파일을 바꾸는 교체 주기를 나타낸다. 설정값은 daily, weekly, monthly 가 있다. |
rotate N
| 교체 파일 개수를 설정한다. 로그파일 교체 주기가 weekly이고 rotate 4라고 되어 있다면 로그는 한 달간(4 Weeks) 보관된다. |
create
| 지난 로그 파일 교체 후 새 로그 파일을 생성한다. |
compress
| 로그 파일을 압축한다. 기본값은 비압축 |
만약 로그 파일 보관 기간을 8주로 변경하고 싶다면 /etc/logrotate.conf 파일 내용을 아래와 같이 변경하면 된다.
rotate 8
|
■ logger 명령
1). 명령형식
logger [옵션] [messages]
2). 옵션
옵션
|
내 용
|
-i
| 메세지에 logger 프로세스의 PID를 남긴다. |
-f FILENAME
| 파일의 내용을 메세지 내용으로 사용한다. |
-p PRIORITY
| 메세지의 우선순위를 나타낸다. 즉 Facility.Security를 나타낸다. |
-t TAG
| 메세지에 TAG를 명시한다. 일반적으로 TAG는 프로세스 이름이다. |
messages
| log로 남길 메세지를 나타낸다. |
3). 예제
[root@centos701 ~]# echo "local0.info /var/log/local0.log" >> /etc/rsyslog.conf
[root@centos701 ~]# [root@centos701 ~]# touch /var/log/local0.log [root@centos701 ~]# [root@centos701 ~]# systemctl restart rsyslog.service [root@centos701 ~]# [root@centos701 ~]# more /var/log/local0.log [root@centos701 ~]# [root@centos701 ~]# logger -i -p local0.info -t LOCAL0 "local0 information" [root@centos701 ~]# [root@centos701 ~]# more /var/log/local0.log Feb 1 12:06:49 centos701 LOCAL0[19602]: local0 information [root@centos701 ~]# [root@centos701 ~]# logger -i -p local0.debug -t LOCAL0 "local0 debug" [root@centos701 ~]# [root@centos701 ~]# more /var/log/local0.log Feb 1 12:06:49 centos701 LOCAL0[19602]: local0 information [root@centos701 ~]# |
여기까지 rsyslogd에 대해 알아보았습니다.
다음 게시물에서는 리눅스 본딩(Bonding)을 이용한 네트워크 이중화에 대해 알아보도록 하겠습니다.
No comments:
Post a Comment