CentOS 8 - AWStats FTP/메일로그 분석하기

    AWStats 경우는 스트리밍/메일/FTP 다양하게 로그 분석이 가능합니다. 스트리밍은 사용할 일이 없어 제외하고 메일 및 FTP를 추가로 로그 분석해보도록 하겠습니다. 방식은 같습니다. 다만 아파치나 IIS처럼 디폴트가 설정이 없기 때문에 LogFormat을 직접 설정해야 하는 부분이 있습니다.

     

    들어가기 전

    ※ 이미 만들어져 있는 AWStats.#.conf 파일 열기(스크린샷 참고)

    [root@localhost ~]# vim /etc/awstats/awstats.#.conf

    [정리(번역기)]

    ※ 숫자 4번 아래부터 "사용자 고유의 로그 형식" = 로그가 FTP, 메일 또는 기타 형식인 경우 다음 키를 사용하여 로그 형식 문자열을 정의해야 합니다. [FTP, 메일 또는 다른 유형의 웹 로그 형식 예제는 FAQ 참조) 하면 됩니다.

    quote 차이는 " ~ " (양쪽 따옴표) 포함(인용부)의 강조 의미로 받아들이면 됩니다.

     

    # %host / Client hostname or IP address (or Sender host for mail log)

    → 클라이언트 호스트 이름 또는 IP 주소 (메일 로그에서는 발송자 호스트로 표시)

     

    # %host_r / Receiver hostname or IP address (for mail log)

    → 수신자 호스트 이름 또는 IP주소 (메일 로그 전용)

     

    %lognamequot / Authenticated login/user with format: "john"

    → 인증된 로그인 / 사용자 형식 : "john"

     

    # %logname / Authenticated login/user with format: john

    → 인증된 로그인 / 사용자 형식 : john

    ※ 뒤 QUOT 차이는 " ~ " (양쪽 따옴표) 인용부의 강조 의미로 받아들이면 될 듯합니다.

     

    # %time1 / Date and time with format: dd/mon/yyyy:hh:mm:ss +0000 or dd/mon/yyyy:hh:mm:ss

    → 날짜 및 시간 형식 [예시] : [26/10/2020:13:59:59 +0000] 또는 [26/10/2020:13:59:59]

     

    # %time2 / Date and time with format: [yyyy-mm-dd hh:mm:ss]

    → 날짜 및 시간 형식 [예시] : [2020-10-26 13:59:59]

     

    # %time3 / Date and time with format: Mon dd hh:mm:ss or Mon dd hh:mm:ss yyyy

    → 날짜 및 시간 형식 [예시] : [Mon 26 13:59:59] 또는 [Mon 26 13:59:59 2020]

     

    # %time4 / Date and time with unix timestamp format: dddddddddd

    → 유닉스 타임스탬프 형식의 날짜 및 시간 [예시] : [1234567890]

    ※일반 시간으로 표시하기 위해서는 변환해야 함

     

    # %time5 / Date and time with format iso: yyyy-mm-ddThh:mm:ss, with optional timezone specification (ignored)

    → 국제표준시간 ISO 형식의 날짜 및 시간 [예시] : [2020-10-26 13:59:59], 선택적 시간대 지정 (무시됨)

     

    # %time6 / Date and time with format: dd/mm/yyyy, hh:mm:ss

    → 날짜 및 시간 형식 [예시] : [26/10/2020, 13:59:59]

     

    %methodurl / Method and URL with format: "GET /index.html HTTP/x.x"

    메소드 및 URL 형식 [예시] : "GET /index.html HTTP/1.1"

     

    # %methodurlnoprot / Method and URL with format: "GET /index.html"

    → 메소드 및 URL 형식 [예시] : "GET /index.html"

     

    # %method / Method with format: GET

    → 메소드 및 URL 형식 [예시] : GET

     

    # %url / URL only with format: /index.html

    URL 형식 [예시] : /index.html

     

    # %query / Query string (used by URLWithQuery option)

    쿼리 문자열 (URLWithQuery 옵션에서 사용)

     

    # %code / Return code status (with format for web log: 999)

    code 리턴 코드 상태 (웹 로그 형식 : 999)

     

    # %bytesd / Size of document in bytes

    문서 크기 (바이트 단위)


    # %refererquot / Referer page with format: "http://from.com/from.htm"

    참조 페이지 형식 [예시] : "http://from.com/from.htm"


    # %referer / Referer page with format: http://from.com/from.htm"

    → 참조 페이지 형식 [예시] : http://from.com/from.htm

     

    # %uabracket / User agent with format: [Mozilla/4.0 (compatible, ...)]

    사용자 에이전트 형식 [예시] : [Mozilla/4.0 (compatible, ...)]


    # %uaquot / User agent with format: "Mozilla/4.0 (compatible, ...)"

    사용자 에이전트 형식 [예시] : "Mozilla/4.0 (compatible, ...)"


    # %ua / User agent with format: Mozilla/4.0_(compatible...)

    사용자 에이전트 형식 [예시] : Mozilla/4.0_(compatible...)


    # %gzipin / mod_gzip compression input bytes: In:XXX

    압축 입력 바이트 [예시] : In:XXX


    # %gzipout / mod_gzip compression output bytes & ratio: Out:YYY:ZZpct.

    → 압축 출력 바이트 및 비율 [예시] : Out:YYY:ZZpct.


    # %gzipratio / mod_gzip compression ratio: ZZpct.

    압축 비율 : ZZpct.


    # %deflateratio / mod_deflate compression ratio with format: (ZZ)

    → 압축 비율 형식 : (ZZ)


    # %email / EMail sender (for mail log)

    → EMail 이메일 발신자 (메일 로그 전용)

     

    # %email_r / EMail receiver (for mail log)

    → EMail 이메일 수신자 (메일 로그 전용)

     

    # %virtualname / Web sever virtual hostname.

    Use this tag when same log contains data of several virtual web servers.

    AWStats will discard records not in SiteDomain nor HostAliases.

    웹 서버 가상 호스트 이름. 동일한 로그에 여러 가상 웹 서버의 데이터가 포함된 경우에 태그를 사용합니다. AWStats는 SiteDomain 또는 HostAliases에 없는 레코드를 삭제합니다.

     

    %cluster / If log file is provided from several computers (merged by logresolvemerge.pl),

    use this to define cluster id field.

    → 로그 파일이 여러 컴퓨터에서 제공되는 경우 (logresolvemerge..pl에 의해 병합됨), 이를 사용하여 클러스터 ID 필드를 정의합니다.

     

    %extraX / Another field that you plan to use for building

    a personalized report with ExtraSection feature (See later).

    → ExtraSection 기능을 사용하여 개인화된 보고서를 작성하는 데 사용할 또 다른 필드입니다 (나중에 참조).

     

    ※ 로그 형식에 위 목록에 포함되지 않은 일부 필드가 있는 경우 다음 Key를 이용.

    # %other / Means another not used field

    사용되지 않는 다른 필드를 의미합니다.

    # %otherquot / Means another not used double quoted field

    → 사용되지 않은 다른 큰 따옴표 필드를 의미합니다.

     

    ※ 로그 형식에 데이터 필드 앞에 오는 literal strings 이 있는 경우 다음 Key를 이용.

    status=%code / Means your log files have HTTP status logged as

    "status=200" Literal strings that follow data field must be separated from said data fields by space.

    로그 파일에 "status = 200"으로 기록된 HTTP 상태가 있음을 의미합니다. 데이터 필드를 따르는 리터럴 문자열은 해당 데이터 필드와 공백으로 구분해야 합니다.


    AWStats FTP 설정

    [root@localhost ~]# cd /etc/awstats/  (경로 이동)

     

    ※ 이미 설정으로 만들어진 파일을 복사하여 이름만 변경합니다.

    [root@localhost ~]# cp awstats.foxydog11.com.conf awstats.ftp.conf (파일 복사 및 이름 변경)

    [root@localhost ~]# vim awstats.ftp.conf  (파일 수정)

     

         52 LogFile="/var/log/xferlog"  [FTP 로그 (디폴트) 경로 잡아주기]

     

         ※ 예시 참고

         57 #  W - For a web log file [웹 로그]
         58 #  S - For a streaming log file [스트리밍 로그]
         59 #  M - For a mail log file [메일 로그]
         60 #  F - For an ftp log file [FTP 로그]

         64 LogType=F  [FTP로 변경]

     

        ※ FTP의 경우는 로그 형식을 직접 맞춰줘야 합니다. (xferlog 확인해보면)

      Fri Oct 23 15:06:28 2020 1 ::ffff:124.111.208.234 0 /BMP1.bmp b _ i r test ftp 0 * i

      로그가 쌓이며 아래와 같은 로그 형식으로 변경해줘야 AWStats에서 인식합니다.

     

        123 LogFormat = "%other %time3 %other %other %host %bytesd %url %other %other %method %other %host %code %other %other %other"  [(#)주석 해제 후 다음과 같은 Key 설정]

     

        128 #LogFormat=1  [(#)주석 처리]

     

        159 SiteDomain="FTP"  [본인 서버 IP 또는 호스트 이름 변경]

     

        174 HostAliases="FTP 127.0.0.1 localhost"  [본인 서버 IP 또는 호스트 이름 변경]

    [root@mail awstats]# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=ftp -update  (설정 업데이트)

    Create/Update database for config "/etc/awstats/awstats.ftp.conf" by AWStats version 7.8 (build 20200416)

    From data in log file "/var/log/xferlog"...
    Phase 1 : First bypass old records, searching new record...
    Direct access after last parsed record (after line 43)
    Jumped lines in file: 43
     Found 43 already parsed records.
    Parsed lines in file: 0
     Found 0 dropped records,
     Found 0 comments,
     Found 0 blank records,
     Found 0 corrupted records,
     Found 0 old records,
     Found 0 new qualified records.

    웹 URL 확인 : http://localhost/awstats/awstats.pl?config=ftp  [스크린샷 참고]

    ※ 테스트 서버는 로그 수집이 적어 공식 사이트에서 제공하는 테스트 페이지를 직접 확인하시면 됩니다.

    공식 사이트 FTP 데모 페이지 : https://awstats.sourceforge.io/awstats.ftp.html

    ( 다만 데모 페이지는 상당히 예전 버전이라 약간의 인터페이스 차이가 발생할 수 있습니다. )

     

     

    AWStats 메일 설정

    [root@localhost ~]# cd /etc/awstats/  (경로 이동)

     

    ※ 이미 설정으로 만들어진 파일을 복사하여 이름만 변경합니다.

    [root@localhost ~]# cp awstats.foxydog11.com.conf awstats.mail.conf  (파일 복사 및 이름 변경)

    [root@localhost ~]# vim awstats.mail.conf  (파일 수정)

     

         ※ 메일의 경우는 메일 컨버터 파일을 이용해야 AWStats 통계가 제대로 나옵니다.

         ※ AWStats 툴 경로 확인(/usr/local/awstats/tools)

         52 LogFile="perl /usr/local/awstats/tools/maillogconvert.pl standard < /var/log/mail.log |"

         [메일(Postfix) 로그 잡아주기]

     

         ※ 예시 참고

         57 #  W - For a web log file [웹 로그]
         58 #  S - For a streaming log file [스트리밍 로그]
         59 #  M - For a mail log file [메일 로그]
         60 #  F - For an ftp log file [FTP 로그]

         64 LogType=M  [해당 설정]

     

        ※ MAIL의 경우는 로그 형식을 직접 맞춰줘야 합니다. (maillog 확인해보면)

    Oct 13 03:36:10 mail postfix/smtpd[18172]: NOQUEUE: reject: RCPT from unknown[IP]: 454 4.7.1 <메일주소>..

        로그가 쌓이며 아래와 같은 로그 형식으로 변경해줘야 AWStats에서 인식합니다.

     

        123 LogFormat = "%time2 %email %email_r %host %host_r %method %url %code %bytesd"

        [(#)주석 해제 후 다음과 같은 Key 설정]

     

        128 #LogFormat=1  [(#)주석 처리]

     

        158 SiteDomain="mail"  [본인 서버 IP 또는 호스트 이름 변경]

     

        173 HostAliases="mail 127.0.0.1 localhost"  [본인 서버 IP 또는 호스트 이름 변경]

    [root@mail awstats]# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=mail -update  (설정 업데이트)

    Create/Update database for config "/etc/awstats/awstats.mail.conf" by AWStats version 7.8 (build 20200416)

    From data in log file "perl /usr/local/awstats/tools/maillogconvert.pl standard < /var/log/maillog-20201018 |"...

    Phase 1 : First bypass old records, searching new record... 
    Searching new records from beginning of log file...
    Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
    Jumped lines in file: 0
    Parsed lines in file: 4
     Found 0 dropped records,
     Found 0 comments,
     Found 0 blank records,
     Found 0 corrupted records,
     Found 0 old records,
     Found 4 new qualified records.

    웹 URL 확인 : http://localhost/awstats/awstats.pl?config=mail  [스크린샷 참고]

    ※ 테스트 서버는 로그 수집이 적어 공식 사이트에서 제공하는 테스트 페이지를 직접 확인하시면 됩니다.

    공식사이트 FTP 데모 페이지 : https://awstats.sourceforge.io/awstats.mail.html

    ( 다만 데모페이지는 상당히 예전 버전이라 약간의 인터페이스 차이가 발생 할 수 있습니다. )

     

    마치며

    AWStats는 이 정도만 해도 반이상은 먹고 들어갈 수 있습니다. 윈도우도 가능하나 개인적으로 라인선스를 따로 가지고 있지 않아 설치는 가능하다고 해도 라이선스 적용하지 않는 이상 추가 서비스를 이용하지 못하기 때문에 미루고 있는 상황입니다. 기회가 된다면 따로 포스팅하도록 하겠습니다.

    Designed by JB FACTORY