ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시스템 로그의 설정
    Technique/LPIC 2019. 10. 29. 16:23
    반응형

    컴퓨터의 동작 상태의 기록을 로그라고 한다. 세큐리티나, 시스템 관리의 필요성에 의하여, 로그의 출력을 커스터마이즈 하는 것이 중요하다. Linux에서는 syslog를 사용하여 다양한 이벤트를 로그파일에 기록하거나, 콘솔에 표시하는 것이 가능하도록 되어 있다. syslog는 다른 프로그램으로부터의 메시지를 받아들이거나 출력처나 우선도에 따라서 분류하여 지정된 출력처로 보낸다.

    시스템 로그 ( 시스로그 )를 취득하여 처리하는 소프트웨어에는 syslog 쪽이 rsyslog나 syslog-ng 등이 사용된다. 

    이편에서는 syslog 또는 rsyslog를 다룰 예정이다. 하지만 대부분 그러하듯 사용방법은 대부분 비슷하다.

    참고
    CentOS7 또는 Ubuntu 14.04 는 rsyslog를 표준으로 채용하고 있다.

    syslog/rsyslog의 설정

    syslog의 동작을 설정하기 위해서는 syslog의 설정 파일인 /etc/syslog.conf에 기록한다. 이 파일에는 어떤 종류의 로그를 어디에 출력할 것인가를 설정한다. 

    /etc/syslog.conf 파일은 아래의 서식으로 이루어진다.

     

    facility, priority , 출력처

    facility ( 파실리티 )

    facility는 메시지의 출력처이다. 구체적으로는 커널이나 실행 중의 프로세스가 된다. facility를 사용하는 것으로 메시지의 출력이 어디서부터 왔는지 로그의 출력처를 제한하는 것이 가능하다. [*]를 이용하는 것으로 모든 facility를 선택 가능하다.

    facility 설명
    auth, authpriv 인증 시스템 ( login이나 su )
    cron cron
    daemon 각종 데몬
    kern 커널
    lpr 인쇄 시스템
    mail 메일 시스템
    syslog syslog 기능
    local0  ~ local7 독자 설정

     

    priority 우선순위

    priority는 메시지의 우선도를 나타낸다. priority를 낮게 설정하는 것으로 로그에 출력되는 정보량도 많이 달라진다. * 을 사용하면 모든 priority를 선택 가능하다. 아래의 표는 priority가 높은 것 순으로 작성하였다. none은 예외이며 지정된 priority를 예외 하는 역할을 가지고 있다.

     

    priority 설명
    emerg 위급적인 상태
    alert 급한 대응이 필요함
    crit 위험한 상태
    err 일반적인 에러
    warning 시스템으로 부터의 경고
    notice 시스템으로 부터의 중요한 통지
    info 시스템으로 부터의 정보
    debug 디버그 정보
    none priority를 무시

    출력처

    메시지의 출력처이다. 로그 파일에 저장하고 싶은 경우에는 파일명을 full path로 지저 한다 ( -를 선두에 붙이면 작성 후에 플래시 하지 않는다. 작성 빈도가 높은 쓰기의 부하를 내릴 순 있지만, 시스템 장애가 발생했을 경우 로그를 작성되지 않을 경우가 있다. ) [@]를 사용하여 호스트명을 지정하면 네트워크 상의 리모트 호스트에 로그를 전송하는 것도 가능하다 유저명을 지정하면 해당 유저의 단말에 메시지가 출력된다.. [*]를 이용하면 모든 유저에게 통지한다.

     

    표기 설명
    파일명 파일에 출력한다.
    @호스트 명 리모트 호스트의 syslogd 에 출력한다.
    유저명 해당 유저의 단말에 출력한다.
    /dev/console 콘솔에 출력한다.
    * 모든 유저의 단말에 출력한다.

    /etc/syslog.conf의 설정 예

    맨 처음 실행하면 커널이 출력하는 메시지가 모드 /var/log/lernel 에 보내고 만다. 2행과 3행에는 커널이 출력할 메시지로 더해 priority가 err이상의 것은 호스트 lpic로 보내는 것과 콘솔에도 출력하도록 한다. 마지막 행에는 모든 긴급 메시지가 로그인되어 있는 유저의 단말에 보내도록 한다.

     

    # 모든 유저으 ㅣ커널 메시지를 콘솔에 출력한다
    kern.* /dev/console
    
    # priority가 info이상이지만, facility가 authpriv, mail, cron이외의 로그를 저장
    *.info;mail.none;authpriv.none;cron.none /var/log/messages
    
    # priority가 authpriv의 로그를 저장
    authpriv.* /var/log/secure
    
    # facility가 mail 인 로그의 저장
    mail.*  -/var/log/maillog
    
    # facility가 cron 인 로그의 저장
    cron.*  /var/log/cron
    
    # 긴급한 메시지는 모든 유저에게 송신
    *.emerg *

     

    /etc/rsyslog.conf의 설정

    rsyslog의 설정 파일은 /etc/rsyslog.conf도 기본적인 설정은 /etc/syslog.conf와 동일하다. rsyslog는 syslog와 비교하여 아래와 같은 다른 점이 있다.

     

    • 로그의 네트워크 송신 시 TCP, SSL/TLS도 이용 가능하다 ( syslog는 UDP 뿐 )
    • MariaDB나 PostgresSQL 등의 데이터 베이스에 로그를 저장한다.
    • 로그에 대한 패턴 매칭을 사용하여 파일 처리를 실행할 수 있다.
    • 로그의 출력 포맷을 설정할 수 있다.
    • 모듈단위로 기능을 추가할 수 있다.

    이하는 /etc/rsyslog.conf 파일이다.

     

    # 타임스탬프의 서식
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    
    # /etc/rsyslog.d 디렉터리 이하의 설정 파일을 읽음
    $IncludeConfig /etc/rsyslog.d/*.conf
    
    # 이하는 syslog.conf의 설정과 동일
    kern.* /dev/console
    *.info;mail.none;authpriv.none;cron.none /var/log/messages
    authpriv.* /var/log/secure
    mail. * -/var/log/maillog
    cron.* /var/log/cron
    *.emrg *

    설정 변경 후에는 rsyslog의 재기동 또는 설정 파일의 재 일기가 필요하다.

     

    logger 커맨드

    logger 커맨드를 사용하여 로그 메시지를 생성하는 것이 가능하다. syslog.conf의 설정을 체크할 경우 사용 가능하다.

     

    logger -p syslog.info -t Test "logger test message "

     

    보통 facility를 syslog, priority를 info로 설정하면 메시지는 /var/log/messages 에 저장된다

     

    로그 조사

    로그를 조사하는 것으로 시스템의 이용상 태나 소프트웨어의 동작에 이상이 없는지 등을 확인할 수 있다. 또한 문제의 징후를 발견할 수도 있다. 우선은 주로 사용하는 로그파일인 /var/log/messages를 확인해볼 수 있다.

     

    Jun 27 14:16:44 lpic kernel: Loaded 162 symbols from 3 modules

    위와 같은 형식으로 작성되어 있다.

    이런 로그에서는 아래의 정보를 확인할 수 있다.

    • 일시 : Jun 27 14:16:44
    • 출력처 호스트 명 : lpic
    • 메시지의 출력처 : kernel
    • 메시지 : Loaded 162 symbols from 3 modules

    로그 파일을 계속하여 감시하기 위해서는 -f 옵션을 붙인 tail 커맨드를 실행한다. 로그 파일에 로그가 추가되는 것을 계속하여 감시할 수 있다.

     

    로그는 방대하기 때문에 특정 메시지만 조사하고 싶을 경우에는 grep 커맨드를 사용하여 검색 하하는 것도 가능하다

     

    /var/log/secure 파일에는 인증 등의 세큐리티 관련의 로그가 저장된다.

     

    로그인 중인 유저를 확인하는 방법은 who 커맨드를 사용한다.

    w 커맨드를 사용하면 로그인 중의 유저에 더해 시스템 정보도 표시한다.

    who 커맨드나 w 커맨드는 /var/run/utmp 파일의 정보를 참조하고 있다. 이 파일은 로그인 중의 유저 정보가 저장되어 있는 곳이다. last 커맨드를 사용하면 최근 로그인한 유저의 리스트가 표시된다. 이 커맨드는 로그 파일 /var/log/wtmp 파일을 참조한다.

     

    lastlog 커맨드는 /var/log/lastlog 파일을 참조하여 유저별로 최근의 로그인 리스트를 보여준다. 한 번도 로그인한 적이 없는 유저는 그에 해당하는 메시지가 따로 출력된다.

     

    systemd를 채용하고 있는 시스템인 경우 journalctl 커맨드를 사용하여 systemd의 로그를 볼 수 있다.

     

    옵션 설명
    -f 로그의 끝을 표시한다.
    -r 로그를 새로운 순으로 표시한다( 기본은 오래된 순 )
    -u Unit 명 설정한 Unit의 로그를 출력한다.
    --full 이스케이프 문자를 제외하고 plain text로 출력한다
    --no-pager  1페이지 단위로 표시하지 않고 모든 로그를 출력한다.

    journalctl 커맨드를 실행하면 less 등의 페이저를 사용하여 1페이지씩 로그를 표시한다.

     

    이 로그가 저장되어 있는 것은 /var/log/journal이나 /var/run/log/journal이라고 하는 디렉터리 내에 있는 바이너리 파일이다. 로그는 일정량을 넘어가면 낡은 순서부터 삭제된다.

     

    아래의 표는 주요한 로그 파일과 해당 로그를 보기 위해 이용하는 대표적인 커맨드의 정리이다.

     

    로그 파일 커맨드
    /var/log/messages less, tail, grep
    /var/log/syslog less, tail, grep
    /var/log/secure less, tail, grep
    /var/log/wtmp last
    /var/run/utmp who, w
    /var/log/lastlog lasglog

    로그 파일의 로테이션

    로그파일은 배치해두면 추가되기만 할 뿐이기 때문에 용량이 거대해져 간다. 로그파일의 로테이션 기능을 사용하면 낡아진 로그를 나누고, 로그파일이 방대해지는 것도 예방할 수 있다. 이 기능을 사용하면 예를 들어 /var/log/messages 파일은 /var/log/messages.1 파일로 이름을 변경하고 새로운 /var/log/messages 파일이 작성된다. 

    다음 로테이션이 오면 messages.1 파일이 messages.2 가 되며 messages 파일이 messages.1이 된다. 규정된 파일수를 넘어가면 가장 늙은 로그 파일이 삭제된다.

     

    로그 파일의 로테이션 기능은 logrotate 유틸리티가 제공한다. logrotate 유틸리티는 cron을 이용하여 정기적으로 실행된다. logrotate의 설정은 /etc/logrotate.conf 파일에서 행한다. 

     

    # 로테이션 주기를 1주일로 설정
    weekly
    
    # 백업로그를 4주간 보관한다
    rotate 4
    
    # 로테이션된 후 비어있는 로그파일을 작성한다
    create
    
    # 로그 파일을 압축한다
    compress
    
    # /var/log/wtmp 파일의 설정
    /var/log/wtmp {
        monthly                  // 로테이션 주기를 1개월로 설정
        create 0664 root utmp    // 퍼미션을 644 소유자를 root 그룹을 utmp로 새로운 파일 작성
        rotate 1                 // 백업 로그를 1개 저장한다.
    }

     

    반응형

    'Technique > LPIC' 카테고리의 다른 글

    프린터의 관리  (0) 2019.10.29
    메일 관리  (0) 2019.10.29
    시스템 락의 설정  (0) 2019.10.29
    cron과 at의 접근제한  (0) 2019.10.29
    job schedule 관리  (0) 2019.10.27

    댓글

Designed by Tistory.