티스토리 뷰
반응형
[강좌] 시스템 최적화 - 로그파일 분석 및 효율적으로 관리하기참고자료
man syslogd.confman sysklogdman logrotate20만통의 전자메일과 sendmail(마소 99년 5월)중 로그 파일 관리부분기타 리눅스 및 유닉스 시스템 관리 관련 서적
0. 들어가며시스템에는 사용자 로그인, 메일등 모든 시스템 활동에 대한 로그를 기록하고 이를 가지고 시스템의 문제에 대해서 분석할 수 있다.시스템의 로그가 어떤 식으로 기록되고 어떤 의미를 가지고 있는지,이를 어떻게 활용해야할지 시스템 관리자라면 반드시 숙지하고 있어야
할 것이다.소규모로 서버를 운영하는 경우 로그파일에 그다지 신경을 쓰는 일이 없다.그렇지만 제공하는 서비스가 많아지고 규모가 커질 경우 예상치 못한 곳에
서 문제가 생기는 일이 많다. 그중 하나가 엄청나게 증가하는 로그파일문제이다. 예를 들어보자. 하루에 10만통의 전자메일을 처리하는 경우를 생각해보자.sendmail은 전자메일을 전송하면서 그 결과 메시지른 syslogd를 이용/var/log/maillog에 저장한다. (이는 설정에 따라 다를 수 있다) 또한여기에 pop3를 사용해 메일을 가져간 기록과 메일을 전송한 기록까지저장되어야한다. 정상적으로 전자메일이 전송되는 경우 기록되는 메시지는 560 바이트정도이다. 그렇지만 전송시 에러가 나는 경우에는 그 에러 횟수에 따라 에러 메시지가 추가된다. 평균 하나의 전자메일이 1KB 정도의 로그를 기록한다고 해보자. 하루에 10만개의 메일을 전송한다면 하룻동안 로그의 크기만 100M 이고 일주일이면 700MB이다. 여기에 메일계정이 1000명이고 각 사용자가 5분마다 pop3로 메일을 확인한다고 했을 경우를 추가해야한다. 한번에 약 0.2KB의 로그가 쌓이면시간당 12번(5분에 한번씩 확인하는 경우), 하루 8시간 근무시 96번이고96*0.2KB = 192kb이다. 1000명이므로 192MB가 되고 일주일이면 일요일을제외하더라도 1.15G정도가 된다. 한 사람당 메일용량을 10M씩 할당하면 전자메일을 저장할 용량만으로10G가 필요하고 로그를 위해 2G 이상이 필요하다. 여기서 그냥 2G로 끝나는 것이 아니라 rotate 값이 4라면 8G가 된다. 가히 끔찍한 상황이예상되지 않는가? 여기서만 끝나는 것이 아니다. syslogd는 maillog를 열어놓고 계속 로그를 기록하는데 로그파일이 1M이상 넘어가면 하나의 메시지를 처리하기위해 시스템 자원을 10% 이상 사용한다고 하며 10M가 넘으면 40% 이상,100M가 넘으면 80% 이상의 시스템 자원을 사용한다고 한다. (물론 이는자신의 시스템 상황을 끊임없이 모니터링해서 자신에 맞추어야 할 것이
다) 결국 서비스를 제공하는데 자원을 사용해야하는데 엄청나게 커진로그파일때문에 시스템의 자원이 없어져서 나중에는 전자메일 전송이
아니라 로그 기록에 모든 cpu 시간을 사용해야한다. 하드 디스크를 빈번하게 사용하는 작업이 많으면 시스템의 성능은 급격하게 떨어진다.이제 웹서버로그 기록을 살펴보자. 이용자가 접속할 때마다 기록되는 access_log는 한번 접속당 약 85Byte가 증가한다. 하루 10만번 접속하면 8.5M이다. 일주일이면 59.5M이다. 한달이면 255M이다. 서비스하는 규모가 더 크다면 로그파이을 액세스하고 갱신하는데는 더 많은
시스템 자원을 사용할 것이다.서론을 이렇게 장황하게 이야기한것은 관리자가 로그 기록에 신경을
쓰지 않는다면 대규모 서비스를 제공하면서 얼마나 큰 문제가 생길수
있는지를 알려주고자 하기 위함이다. 필자의 개인 홈페이지에서야 그런 문제가 생기지는 않겠지만....로그 기록을 어떤 식으로 설정할 것인가? 정책에 관한 것은 관리자가해야 할 몫이라 생각하며 여기에서는 로그 파일의 설정 및 로테이션
에 대해서 설명을 한다. 필자가 책을 그다지 뒤져보지 않아서 그런지는 모르겠는데 유닉스 서버 관리 서적에도 이에 대해서는 그리 자세히
나와있지 않아서 이번 기회를 이용해 정리해보고자 한다.1. 시스템 로그 기록 (syslog)일반적으로 배포판 설치시 로그파일을 기록하는 패키지가 자동으로
설치된다. # rpm -qa | grep loglogrotate-3.3-1 --->> 로그 로테이트(순환)sysklogd-1.3.31-12 --->> 시스템 로그 기록# rpm -ql sysklogd/etc/logrotate.d/syslog/etc/rc.d/init.d/syslog/etc/rc.d/rc0.d/K99syslog/etc/rc.d/rc1.d/K99syslog/etc/rc.d/rc2.d/S30syslog/etc/rc.d/rc3.d/S30syslog/etc/rc.d/rc5.d/S30syslog/etc/rc.d/rc6.d/K99syslog/etc/syslog.conf --->> 설정파일/sbin/klogd --->> 커널 로그 대몬/sbin/syslogd --->> 시스템 로그 대몬/usr/doc/sysklogd-1.3.31/usr/doc/sysklogd-1.3.31/ANNOUNCE/usr/doc/sysklogd-1.3.31/INSTALL/usr/doc/sysklogd-1.3.31/NEWS/usr/doc/sysklogd-1.3.31/README.1st/usr/doc/sysklogd-1.3.31/README.linux/usr/doc/sysklogd-1.3.31/Sysklogd-1.3.lsm/usr/man/man5/syslog.conf.5/usr/man/man8/klogd.8/usr/man/man8/sysklogd.8/usr/man/man8/syslogd.8참고로 문서디렉토리의 내용은 사용과 관련해서는 그다지 도움이
되지 않고 오히려 맨페이지가 도움이 되었다.# ps aux | head -n10USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.1 1168 56 ? S 14:07 0:05 init [3]root 2 0.0 0.0 0 0 ? SW 14:07 0:00 [kflushd]root 3 0.0 0.0 0 0 ? SW 14:07 0:00 [kupdate]root 4 0.0 0.0 0 0 ? SW 14:07 0:00 [kpiod]root 5 0.0 0.0 0 0 ? SW 14:07 0:05 [kswapd]root 6 0.0 0.0 0 0 ? SW< 14:07 0:00 [mdrecoveryd]root 285 0.0 0.5 1232 180 ? S 14:07 0:00 syslogd -m 0root 296 0.0 0.0 1464 0 ? SW 14:07 0:00 [klogd]보통 위와 같이 로그 대몬은 시스템의 부팅시 초창기에 실행이 된다.그러면 가장 먼저 /etc/syslog.conf 를 살펴보자. syslod의 설정 파일이다.# cat /etc/syslog.conf# Log all kernel messages to the console.# Logging much else clutters up the screen.#kern.* /dev/console# Log anything (except mail) of level info or higher.# Don't log private authentication messages!*.info;mail.none;authpriv.none /var/log/messages# The authpriv file has restricted access.authpriv.* /var/log/secure# Log all the mail messages in one place.mail.* /var/log/maillog# Everybody gets emergency messages, plus log them on another# machine.*.emerg *# Save mail and news errors of level err and higher in a# special file.uucp,news.crit /var/log/spooler# Save boot messages also to boot.loglocal7.* /var/log/boot.log설정파일은 매우 간단하다. 빈 행과 # 으로 시작되는 행은 무시된다.(참고로 리눅스는 BSD 형식으로 로그를 구성한다)설정행의 구조는 다음과 같다. facility.level destinationfacility는 메시지를 보내는 서브시스템의 이름이며 level(priority)은 메시지의 중요성(엄격도)을 나타낸다. facility는 다음과 같다.auth, authpriv, cron, daemon, kern, lpr, mail, news, syslog,user, uucp, local0 - local7priority는 다음과 같다. (엄격도가 감소하는 순서)debug, info, notice, warning, warn (same as warning),err, error (same as err), crit, alert, emerg,panic (same as emerg)각자에 대한 설명은 아래를 참고하자.# man 3 syslog facility The facility argument is used to specify what type of pro gram is logging the message. This lets the configuration file specify that messages from different facilities will be handled differently. LOG_AUTH security/authorization messages (DEPRECATED Use LOG_AUTHPRIV instead) LOG_AUTHPRIV security/authorization messages (private) LOG_CRON clock daemon (cron and at) LOG_DAEMON other system daemons LOG_KERN kernel messages LOG_LOCAL0 through LOG_LOCAL7 reserved for local use LOG_LPR line printer subsystem LOG_MAIL mail subsystem LOG_NEWS USENET news subsystem LOG_SYSLOG messages generated internally by syslogd LOG_USER(default) generic user-level messages LOG_UUCP UUCP subsystem level This determines the importance of the message. The levels are, in order of decreasing importance: LOG_EMERG system is unusable LOG_ALERT action must be taken immediately LOG_CRIT critical conditions LOG_ERR error conditions LOG_WARNING warning conditions LOG_NOTICE normal, but significant, condition LOG_INFO informational message LOG_DEBUG debug-level messageauth 대신 auth_priv를 사용할 것을 추천하고 있으며 나머지는읽어보면 쉽게 이해가 갈 것이다. 크론, 대몬, 커널 메시지,로컬에서 사용, 프린터, 메일, 뉴스, syslog, 사용자 정의,UUCP. (auth는 로그인 인증 시스템)emerg : 시스템 패닉alert : 에러 경고. 즉각 알려야할 내용crit : 하드 장치 에러와 같은 임계 에러(critical error)err : 에러warn : 경고notice : 비임계 메시지info : 정보 메시지debug :문제 추적을 돕는 특수 정보만약 none 이라고 하면 그에 대한 모든 로그 메시지를 제외하라는 뜻입니다.모든 facility 나 priority 를 지정하려면 * 를 쓰면 되며여러개를 지정하려면 , 를 사용하면 됩니다.그런데 여기서 반드시 알아두야할것이 priority를 지정하면 그와갈은 priority부터 그 위의 priority에 관련된 로그를 기록한다는것입니다. 만약 info 를 지정하면 emerg 부터 info 사이의 모든로그를 기록하는 것이지요.만약 단일한 priority를 지정하려면 = 를 사용하면 됩니다.!는 priority 범위를 제한합니다. 이에 대해서는 아래에서 설명하는 예를 참고하세요.** 리눅스에서 syslogd는 원래 BSD 소스에 몇가지 기능이 추가되었다. =, ! 등이 이에 속한다.로그파일을 기록으로 남기는 방식에는 여러가지가 있다.가장 먼저 파일형태(/var/log/messages). named pipe. 터미널과 콘솔(/dev/console). 원격 머신(@). 사용자.로그인한 전체 사용자(*)자 가장 먼저 /etc/syslog.conf 를 살펴보자.# cat /etc/syslog.conf# Log all kernel messages to the console.# Logging much else clutters up the screen.kern.* /dev/console# 모든 커널 메시지를 콘솔로.# Log anything (except mail) of level info or higher.# Don't log private authentication messages!*.info;mail.none;authpriv.none /var/log/messages# 모든 info를 messages에 기록. 여기서 mail, authpriv 관련 기록은 제외# The authpriv file has restricted access.authpriv.* /var/log/secure# 모든 로그인 인증 관련 기록. su, login 등을 모두 여기 기록# Log all the mail messages in one place.mail.* /var/log/maillog# 모든 메일 메시지# Everybody gets emergency messages, plus log them on another# machine.*.emerg *# 비상 메시지(emerg)는 현재 로그인한 모든 사용자에게 알림# Save mail and news errors of level err and higher in a# special file.uucp,news.crit /var/log/spooler# uucp, news 의 crit 정보 기록# Save boot messages also to boot.loglocal7.* /var/log/boot.log# 부트 메시지 기록보통 위의 내용이 일반적인 배포판 구성이다.아마 kernel 메시지에는 주석이 되어있을 것이다.예를 들어 *.err /dev/tty8 를 추가해보자.놀고있는 tty8 콘솔에서 시스템에서 발생하는 모든 에러를 볼 수 있다. *.* @taejun이건 모든 메시지를 taejun 이라는 원격 호스트에서 처리하도록할 수 있다. 어떤 경우 이게 유용할까? 이건 클러스터링으로 구성된시스템에서 아주 유용할 것이다. 모든 syslog 메시지를 한대의시스템으로 모을 수 있으니깐.그러면 위의 기본 설정말고 몇가지 예를 더 보자. # Store critical stuff in critical # *.=crit;kern.none /var/adm/critical # 커널을 제외하고 모든 crit 에 해당하는 메시지 기록 # (여기서 = 를 지정한 차이점에 대해서 이해해야함) # Kernel messages are first, stored in the kernel # file, critical messages and higher ones also go # to another host and to the console # kern.* /var/adm/kernel kern.crit @finlandia kern.crit /dev/console kern.info;kern.!err /var/adm/kernel-info # 커널 관련 모든 기록은 kernel 파일에, # 커널에서 crit 이상의 메시지는는 콘솔과 원격 호스트로. # 두번째 부분(원격 호스트)이 유용한 것은 만약 시스템이 # 붕괴해서 디스크에서 복구할 수 없는 에러가 났더라도 # 원격 호스트에서 이 문제를 해결할 수 있는 원인을 # 찾을 수 있다. # 이제 네번째 줄. 이건 info 부터 err 이전 그러니깐 # info , notice, warn 에 대한 메시지를 기록한다. # 로그 범위을 제한하는 것이지요. # The tcp wrapper loggs with mail.info, we display # all the connections on tty12 # mail.=info /dev/tty12 # mail.info에 관련된 메시지를 12번째 콘솔에 기록. # Store all mail concerning stuff in a file #
반응형
'IT > Unix/Linux' 카테고리의 다른 글
CentOS 7.4 Public Key 인증 설정 (1)
2020.02.25
CPU정보 - lscpu (3)
2015.06.04
[Solaris]아파치1.3.27 +톰캣 4.1.29 셋팅 (3)
2005.08.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리더쉽 코칭
- centOS
- 구로사와아키라
- Fair-Trade Coffee
- 요미우리자이언츠
- 청계천
- 스프링
- connection pool
- 라면집
- elasitcsearch
- 커넥션
- 요미우리 자이언츠
- DBCP
- LG트윈스
- 스팸메일방지 CEAS
- elasticsearch
- 일정관리
- 시나가와
- datasource
- 이클립스
- 일본여행
- 산모퉁이
- 간부사원
- 바리스타
- Git
- 자하손만두
- logstash
- filter-plugin
- c3p0
- 간부
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
글 보관함
반응형
Blog is powered by
Tistory / Designed by
Tistory
