[시스템 관리] 01. 로그(Log)
카테고리: SYS_MGMT
🔔 로그(Log)
로그는 소프트웨어를 실행한 후 나타나는 경과 정보를 출력한 것으로, 즉 프로그램이 시간 경과에 따라 ‘언제, 누가, 어디서, 무엇을 했다’와 같은 정보를 기록하는 것을 ‘로깅하다’라고 하며, 기록된 것을 ‘로그’라고 합니다.
■ 로그가 필요한 이유
첫 번째는 오류를 수정하고 개선하기 위함입니다. 컴퓨터 시스템은 완벽하지 않으며, 고장이 발생할 수 있습니다. 따라서 고장이 발생했을 때 어떻게 대처해야 하는지 고려해야 합니다. 고장 발생 시 그 원인을 규명하기 위해서는 고장이 발생했을 당시의 상태와 정보가 중요한데, 이 정보가 바로 로그입니다. 로그는 시간 경과에 따라 기록된 정보이므로, 고장이 발생했을 때 무슨 일이 있었는지, 하드웨어와 소프트웨어를 포함한 시스템의 상태를 시간을 거슬러 올라가며 파악할 수 있습니다.
두 번째 이유는 빅데이터와 관련하여 액세스 정보로서 로그의 필요성이 높아지고 있는데, 이는 사람들의 동향, 의견, 마케팅 조사를 위한 데이터 마이닝의 기반 데이터를 추출할 수 있다는 점입니다. 로그 정보를 분석함으로써, 사람들이 더 흥미를 둘 만한 페이지 제작이나 보여주고자 하는 페이지로 사람들을 유도하는 데 사용할 수 있는 자료를 얻을 수 있습니다. 이러한 분석 결과는 오류 수정과 같은 현재의 개선에만 사용되는 것이 아니라, 과거 데이터를 통해 미래를 예측하고 개선하는 데에도 활용됩니다.
■ syslog
Syslog는 처음에는 메일 서버 전용 로거 프로그램으로 시작되었지만, 이후 다른 애플리케이션에도 syslog가 포함되면서 어느새 표준이 되었고, 이렇게 표준이 된 syslog는 RFC 3164로 체계적으로 정리된 프로토콜입니다.
▶ 로그 쓰기
▶ 로그 수집
■ syslog-ng와 rsyslogd
syslogd는 로그 정보를 분실할 가능성이 있고, 네트워크에서 오가는 로그 정보를 암호화할 수 없다는 문제가 제기되어 현재는 사용되지 않으며, 대신 syslog-ng와 rsyslogd 애플리케이션이 syslogd를 대체하는 용도로 채택되고 있습니다.
syslog-ng는 ‘syslog New Generation’의 약자로, 이름에서 알 수 있듯이 syslog에서 발생하는 문제를 해결하기 위해 개발된 애플리케이션입니다. 반면, rsyslogd는 ‘rocket-fast system for log processing’의 약자로, syslogd의 대안으로 시작되었지만 다양한 소스에서 입력을 받아들이고 변환하여 다양한 출력 위치로 기록할 수 있는 로깅 도구입니다.
▶ syslog-ng / rsyslogd 주요 기능
-
로그 분류 기능
-
TCP를 이용한 로그 정보 송수신(로그 정보 분실 방지)
-
SSL/TLS를 이용한 안전한 로그(네트워크 경유 암호화 실현)
-
데이터베이스로 로그 출력
■ rsyslog의 설정 확인 - /etc/rsyslog.conf
syslog는 로그 정보의 facility와 priority에 따라 출력 위치를 선택해서 해당 출력 위치에 로그 정보를 출력합니다.
▶ facility 목록
| facility명 | 설명 |
|---|---|
| kern | 커널 메시지 |
| user | 사용자 레벨 메시지 |
| 메일 시스템 메시지 | |
| daemon | crond 및 rsyslogd 이외의 시스템 데몬에서 온 메시지 |
| auth(security) | 보안과 인증 또는 인가 메시지 |
| syslog | rsyslogd에 의해 내부에서 생성된 메시지 |
| lpr | 라인 프린터 서브시스템 메시지 |
| news | 네트워크 뉴스 서브시스템 메시지 |
| uucp | UUCP 서브시스템 메시지 |
| cron | cron 메시지 |
| authpriv | 보안과 인증 또는 인가 메시지(private) |
| ftp | FTP 시스템 메시지 |
| NTP | NTP 서브시스템 메시지 |
| … | … |
| local1 | 로컬에서 사용(기타 애플리케이션으로부터의 로그에서 자유롭게 사용할 수 있다.) |
| … | … |
| local7 | 상동 |
▶ priority 목록
| priority명 | 설명 |
|---|---|
| emerg(panic) | 긴급사태(시스템이 불안정한 상태) |
| alert | 경보(지금 바로 대잉이 필요한 상태) |
| crit | 위태로운 상태 |
| err(error) | 오류 |
| warning(warn) | 경고 |
| notice | 주의(정상이지만 주의가 필요) |
| info | 정보 |
| debug | 디버그(문제 대채/개발용 정보) |
| none | 우선순위 없음 |
▶ action(로그를 어디에 남길 것인지 결정) 목록
| action | 설명 |
|---|---|
| 로그 파일 | 파일명(경로) 지정 (ex. /var/log/secure) |
| 원격 로그 서버 | “@호스트주소”를 통해 지정한 호스트로 로그를 보낸다. (ex. @192.168.219.103) |
| 콘솔 | /dev/console로 지정 시 콘솔 출력 |
| user | 지정된 사용자의 스크린으로 메시지를 보낸다. |
| * | 현재 로그인되어 있는 모든 사용자의 스크린으로 메시지를 보낸다. |
▶ /etc/rsyslog.conf 내용
~(생략)~
38 #### RULES ####
#> 커널 관련된 로그를 /dev/console에 기록
42 #kern.* /dev/console
#> 모든 서비스에 대한 info 수준 이상의 로그를 /var/log/messages에 기록
#> mail, authpriv, cron 서비스에 대한 로그는 /var/log/messages에 기록 안함
46 *.info;mail.none;authpriv.none;cron.none /var/log/messages
#> authpriv에 속하는 서비스의 모든 로그 수준의 로그를 /var/log/secure에 기록
49 authpriv.* /var/log/secure
#> 메일 서비스에 관련된 모든 로그 수준의 로그를 /var/log/maillog에 기록
52 mail.* -/var/log/maillog
#> cron 데몬과 at 데몬 등에 의해 발생되는 모든 로그 수준의 로그를 /var/log/cron에 기록
56 cron.* /var/log/cron
#> 모든 서비스의 emerg 수준 이상의 로그를 모든 사용자에게 보냄
59 *.emerg :omusrmsg:*
#> uucp, news 서비스 관련 서버의 crit 수준이 이상의 로그를 /var/log/spooler에 기록
62 uucp,news.crit /var/log/spooler
#> 시스템 부팅될 때의 모든 로그 수준의 로그를 /var/log/boot.log에 기록
65 local7.* /var/log/boot.log
~(생략)~
댓글 남기기