출처:https://www.linux.co.kr/home/lecture/?leccode=278
참조할 강좌 1 : 리눅스 시스템로그구성 및 로그모니터링법 참조할 강좌 2 : 리눅스 로그파일 관리(logrotate)
1. 로그파일 개론
시스템에서 로그란 어떤의미를 가지고 있을까? 시스템관리에 있어서 무시못할 일이 로그파일분석과 관리일 것이다. 시스템에 이상징후가 발생을 했을 때, 시스템관리자가 가장먼저 확인해 보는 것이 로그파일이다. 시스템이 해킹을 당했다고 느낄에 우린 로그파일에 의존하게된다. 어디서(IP Address) 누가(ID) 어떻게(port) 들어와서 어떤작업을 했는지를 확인하려할 때 우린 전적으로 로그파일에 의존하게 된다. 로그파일을 잘 관리함으로 인해서 시스템관리자에게 마지막 희망을 주기도 한다. 따라서 시스템관리자는 로그파일관리에 절대 소홀해서는 아니된다.
그렇다면 관리해야할 로그파일이 얼마나 있을까? 기본적으로 운영체제(시스템이라고 하자)에서 남겨지는 기본적인 로그들(syslogd에 관한 로그들)만도 여러개지만 웹서버(주로 아파치)를 운영하고 있다면 웹로그가 있을 것이고 메일서버(주로 sendmail과 pop)를 운영한다면 메일로그파일이 존재할 것이다. 또한 DNS, 즉 named를 운영하고 있다면 named에 관한 로그파일이 존재할 것이고, ftp서버를 운영하면서 파일서버로 운영을 한다면 ftp 로그파일도 존재할 것이며, samba서버를 운영한다면 이에 대한 로그도 존재할 것이다. 로그파일에 대해서 일일이 열거하는 일 자체가 그리 중요한 것은 아니지만, 자기가 운영하는 시스템에 어떤로그파일이 존재하며 어떤데몬(또는 프로세스)에 의해서 로그가 남겨지는가는 정확히 알고 있어야한다. 아울러 로그파일시스템이 어떤 경로로 남겨지게 되는지에 대해서도 정확히 알고 있어야할 것이다. 서버관리자가 알아야하는 로그파일의 종류에 대해서는 다음절에서 자세히 다루므로 "리눅스서버 로그파일관리 파워가이드"의 2편을 참조바란다. 또한 로그파일의 관리법에 대해서도 3편, 4편에 이어지므로 로그파일 관리실무에 관한 것은 뒷편에 이어지는 강좌를 참조바란다.
자, 그럼 시스템관리자가 관리해야할 필요성에 대해서는 충분히 이해했으리라 생각한다. 그렇다면 "로그파일을 어떤식으로 관리하는 것이 가장 효율적인가?"에 대해서 좀 생각해 보도록 하자.
위에서 언급한 것처럼 로그파일의 종류는 참으로 많다. 따라서 이런 로그파일들이 디스크공간을 차지하는 비율또한 높다고 할 수 있다. 실제로 필자는 7년간 중대형 시스템을 관리해 오고 있지만, "파일시스템풀(filesystem full)"로 인해서 시스템이 다운된 경우를 수도없이 경험해 보았다. 파일시스템풀(filesystem full)이란 할당된 디스크공간(파티션)에 여유공간이 모자란다는 의미로 대부분 로그파일을 그냥 방치한 결과 이 로그파일들이 원인인 경우가 거의 대부분이었음을 강조하고 싶다. 이런 경우 로그파일을 제대로 관리했다면 문제가 발생하지 않았을 것이다 . 뒤에서 자세히 설명하겠지만 리눅스의 로그파일관리 툴인 logrotate라는 것을 이용하면 다음과 같은 작업들을 할 수가 있다.
따라서 시스템관리자는 로그파일에 대한 중요성과 함께 로그파일의 관리에도 만전을 기해야함에는 틀림이없는사실일 것이다. 이후에 이어지는 내용은 logrotate (아파치의 rotatelog 포함)를 이용하여 로그파일을 적절히 관리하는 방법에 대해서 실무를 중심으로 강의를 해나갈 것이다. |
2. 로그파일의 종류 자, 그럼 리눅스시스템에서 제공하는 로그파일의 종류에 대해서 알아보도록 하자. 앞서 잠깐 언급했듯이 리눅스의 로그파일은 기본적인 로그파일만 하더라도 10여개가 넘는다. 그리고 보안툴(예 tripwire, nmap)등을 설치하고 나면 이들에 관한 로그파일들에 새로 생기게 된다. 리눅스의 로그파일의 종류에 대해서 언급해 보면 다음과 같다.
기본적인 로그들은 syslogd에 의해서 제어가 되며, syslogd의 설정파일인 /etc/syslog.conf 파일을 수정함으로써 이 파일들의 저장위치와 저장파일명을 변경할 수도 있다. 필자의 경우에는 보안을 위하여 숨김속성(.으로 시작하는 디렉토리)의 디렉토리를 다른곳에 만들어 역기 숨김속성파일(.으로 시작하는 파일)을 만들어서 잘 찾을 수 없는 곳에 보관을 하고 있다. syslogd에 관한 설명은 바로 이 다음절에 있으므로 뒤에서 자세히 배워보기로 하고,
콘솔로그(/dev/console) 이 로그는 커널(kernel)에 관련된 내용을 시스템콘솔에 뿌려주는 로그이다. 물론, messages내용과 일치하지는 않지만 시스템에 관련된 중요한 내용들(예, 시스템풀, 다운등)에 대한 로그를 관리자에게 알리고자 함이 목적이기 때문에 출력을 파일로 저장하는 것이 아니라 장치명(/dev/console)을 사용하여 콘솔로 로그를 뿌려주게 된다.
시스템로그(/var/log/messages) 이 로그파일의 내용을 잠깐만 보면 다음과 같다. 이 로그에 기록되는 내용은 주로 접속시의 인증에 관한 것과 메일에 관한 내용, 그리고 시스템에 관한 변경사항등 시스템에 관한 전반적인 로그를 기록하는 파일이다. 시스템관리자에 의해서 가장 소중하게 다루어지는 로그이기도 하다. 이 파일에 기록되는 내용을 변경하고자 한다면 /etc/syslog.conf 파일의 내용에서 수정을 해주면 된다.
보안로그(/var/log/secure) 이 로그파일의 내용을 잠깐만 보면 다음과 같다. 이것은 inetd에 의한 로그파일이다. inetd에 관한 것은 이미 강좌를 한 것이 있으므로 참조하기 바라며, 요즘 리눅스의 배포판에는 inetd보다도 xinetd로 업그레이드되어 배포되는 경우가 대부분이다. 하지만 xinetd를 사용하는 시스템에도 이 파일에 로그가 기록된다. xinetd데몬의 확인 방법은 간단히 다음과 같이 할 수 있다. -ef라는 옵션외에도 aux라는 옵션으로 다음과 같은 방법으로도 확인이 가능하다. #ps aux | grep xinetd 또한 실행중인 xinetd의 PID저장 파일은 /var/run/xinetd.pid 이다.
메일로그(/var/log/maillog) 이 로그파일의 내용을 잠깐만 보면 다음과 같다. 이 로그파일의 이름에서 의미하는 바와같이 sendmail이나 pop등의 실행에 관한 기록이 남겨지게 된다. 메일을 주고받을 때에 이 로그파일에기록이 된다. 즉, smtp와 pop에 관한 로그라고 말할 수 있다. 이 로그파일과 관련된 sendmail 데몬의 확인 방법은 간단히 다음과 같이 할 수 있다. 또한 실행중인 sendmail의 PID저장 파일은 /var/run/sendmail.pid 이다.
크론로그(/var/log/cron) 이 로그파일의 내용을 잠깐만 보면 다음과 같다. 시스템의 크론이 작업한 기록을 보관하고 있는 파일이다. 이파일을 보면 크론데몬인 crond가 언제 어떤작업을 했는가를 확인할 수가 있다. 위의 예를 보면 알 수 있는 바와 같이 crond에 의해서 실행되었던 데몬(프로세스, 응용프로그램등)들이 기록되어 있음을 알 수 있다. 즉, crond에 의해서 생성되는 로그가 기록되는 파일이다. 이 로그파일과 관련된 crond데몬의 확인 방법은 간단히 다음과 같이 할 수 있다.
또한 실행중인 crond의 PID저장 파일은 /var/run/crond.pid 이다.
부팅로그(/var/log/boot.log) 이 로그파일의 예를 잠깐 살펴보자. 시스템의 데몬들이 실행되거나 재시작되었을 때 기록되는 로그파일로서 위의 예는 sendmail을 재시작했을 때 boot.log파일에 기록된 예를 보인 것이다.
FTP로그(/var/log/xferlog) 이 로그파일의 내용을 잠깐만 보면 다음과 같다. ftp나 ncftp등의 접속이 이루어 졌을 때 이 로그파일에 기록이 된다. 예를 들어 ws_ftp나 cute_ftp등을 사용했을 때 이 로그파일에 기록되고, 업로드한 파일과 다운로드한 파일들에 대한 자세한 기록과 함께 남겨지게 된다.
웹로그(/usr/local/apache/logs/access_log) 웹로그파일의 내용을 잠깐만 보면 다음과 같다. 여러분들에게 가장 친근한 메일로그가 아닌가 싶다. 리눅스에서 웹서버로는 대부분 아파치를 사용하므로 아파치로그에 대한 예를 든 것이다. 대부분 아파치의 설치위치가 /usr/local/apache이므로 아파치 로그파일의 위치는 /usr/local/apache/logs/access_log가 된다. 만약, 웹호스팅등으로 여러개의 웹사이트를 운영한다면 각각의 웹사이트 로그파일의 위치는 /home/ID/www_log가 될 것이다. 물론, 이 위치는 필자가 권하는 위치이며, 다른곳에 저장을 해도 무방하다. 사용자 각각의 웹사이트의 위치를 지정하는 곳은 아파치 설정파일인 /usr/local/apache/conf/httpd.conf파일중 <Virtual Host>라는 곳에서 하게된다. 가장히 예를 들어본다면 다음과 같다. httpd.conf파일의 내용중 가상호스트 설정부분을 예를 든 것으로 이 사이트(abcc.or.kr)의 로그파일위치는 지정한 대로 /home/abcc/www_log/access_log가 된다. 다른 가상호스트의 사이트위치도 이와 같다고 할 수 있다. 아파치의 환경설정과 가상호스트설정등은 수퍼유저코리아의 "Apache"편을 참고바란다. 이 로그파일과 관련된 httpd데몬의 확인 방법은 간단히 다음과 같이 할 수 있다.
또한 실행중인 httpd의 PID저장 파일은 /usr/local/apache/logs/httpd.pid 이다.
이상으로 리눅스 시스템의 기본적인 로그파일에 대한 종류에 대한 개략적인 설명을 마치고 다음편에는 리눅스 시스템로그데몬인 syslogd에 대한 강좌로 이어갈 것이다. |
3. syslogd의 설치/확인/제거(rpm)
먼저 리눅스 시스템에 설치되어 있는 syslogd의 버전을 확인하는 방법은 다음과 같다.
그리고 리눅스 시스템에 설치되어 있는 리눅스패키지의 구체적인 패키지버전을 확인하려면 다음과 같은 방법으로 할 수가 있다.
다음은 위에서 확인한 리눅스패키지(sysklogd-1.3.33-6)에서 설치되어 있는 파일들의 내용을 확인하는 방법이다.
다음은 새로운 패키지로 업그레이드하고자할 때는 다음과 같이 한다. 새로운 패키지는 대부분의 ftp사이트에서 rpm버전으로 제공하고 있으므로 구하는데는 별 어려움이 없을 것이다. 이예는 sysklogd-1.3.33-6버전보다 신버전임을 가정한 것이므로 업그레이드하는 방법에 대해서만 설명된 것임을 주지바란다.
그리고 설치된 패키지를 삭제하는 방법은 다음과같다. rpm으로 삭제할 때에는 -e 라는 옵션만 주면 패키지설치시에 생성되었던 모든 파일들을 삭제해 준다. |
4. syslogd(시스템로그데몬) 시스템로그관리 데몬인 syslogd에 대한 강좌를 시작합니다. 이 로그데몬의 정식이름은 " Linux system logging utilities"입니다. 즉, "리눅스시스템 로그유틸리티"라는 것이죠. 풀어서 간단히 말씀드리자면 리눅스에서 관리되는 모든 로그파일들을 관리하고 설정하는 데몬이라는 뜻이되겠죠.
우선 syslogd에 관련된 파일들과 데몬그리고 실행방법들에 대한 설명을 아래 표로써 설명을 대신합니다.
로그데몬의 실행흐름도를 간략히 맵으로 그려보면 다음과 같다. 위의 흐름도를 보면 리눅스 로그파일시스템이 어떻게 실행이 되어서 로그파일에 저장이 되며 또한 logrotate(다음편부터 logrotate에 대한 강좌시작됨, 참조바람)에 의해서 관리가 되는지를 한눈에 알 수 있을 것이다. 물론, 필자가 인지하지 못했던 부분이 있을 수도 있으나 필자가 아는 대로 흐름도를 작성해 본 것이다.
A : syslogd 실행(재시작) 시스템이 부팅되면서 처음으로 시작되며, 또는 /etc/rc.d/init.d/syslog start (재시작은 /etc/rc.d/init.d/syslog restart)라는 명령의 수행으로 /sbin/syslogd의 데몬프로세스가 수행이 된다.
B : syslog.conf 읽음 /sbin/syslogd 데몬이 실행이 되면서 /etc/syslog.conf파일을 읽어들이게 된다. 이 /etc/syslog.conf파일에는 시스템에서 사용하는 대부분의 로그파일들에 관한 설정이 되어 있다.
C : syslogd.pid 기록 /sbin/syslogd도 데몬(일종의 프로세스)이므로 이 프로세스의 실행번호(Process ID : PID)를 /var/run/syslogd.pid에 기록하게 된다.
D : syslog.conf에 기록된 각각의 로그파일들의 로그기록 시작 sbin/syslogd의 실행과 함께 syslog.conf파일에 설정되어 있는 각각의 로그파일들(messages, secure, maillog등)이 기록되기 시작한다. syslog.conf파일의 내용을 잠시 살펴보면 다음과 같다. 이 파일(syslog.conf)파일에 대한 강좌가 수퍼유저코리아의 "LINUX"강좌란에 "리눅스 시스템로그구성 및 로그모니터링법"이란 제목으로 있으므로 자세한 내용은 이 강좌를 보기 바란다. syslog.conf 강좌참조 : 리눅스 시스템로그구성 및 로그모니터링법
E : logrotate에 의한 각 log파일들 관리 시스템에서 발생되는 모든 이벤트에 대한 기록들이 각각의 로그파일에 저장이 되고 있으므로 이들 로그파일에 대한 다음과 같은 작업이 필요하다.
이런 작업들을 logrotate가 cron에 의해 정기적으로 수행한다. logrotate에 대한 전문강좌가 별도로 있으므로 참조바란다.
이렇게 로그에 대한 기록과 관리가 되는도중에 syslogd가 재시작 되었다든가 시스템이 rebooting되었다든가하면 위의 A에서부터 E까지가 다시 반복되게 된다. |
'프로젝트 관련 조사 > 로그 관련' 카테고리의 다른 글
tcpdump - 네트워크 패킷 덤프 (0) | 2015.09.24 |
---|---|
[syslog] Ubuntu rsyslog 및 시스로그 포맷 (0) | 2015.09.24 |
아마존( Amazon ) AWS 윈도우( Window )에서 접속 - Putty , pem ppk 변환 (0) | 2015.09.24 |
Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash (0) | 2015.09.23 |
syslog (0) | 2015.09.21 |