강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
GoAccess : 실시간 웹로드 분석 프로그램(커맨드라인 환경)
조회 : 6,032  


GoAccess : 실시간 웹로드 분석 프로그램(커맨드라인 환경)


    작성자 : 정우영
    작성일 : 2014.03.11(화)
    대상 OS : SULinux Server 2014 64Bit


  리눅스 서버를 대량으로 관리하다 보면 서버를 관리하기 위해 SSH를 통해 원격 접속을 한다. 
 장애가 발생되었을 때도 SSH를 통해 접속한 상태에서 분석을 한다. 그렇다 보니 이러한 원격 터미널 환경에서
쉽고 편리하게 사용할 수 있는 도구를 찾게 되었다. 첫번째 찾은것은 htop이고 다음 찾은것은 GoAccess이다.

  여기서 소개할 GoAccess는 실시간 웹로그 분석과 인터렉티브한 뷰어를 터미널에서 제공한다. 물론 HTML형식을 출력하여 웹브라우저를 통해 확인할 수도 있다. 최신버전의 경우 CSV, JSON형태로도 출력이 가능하다.

스크린샷을 보면 간단한 로그 통계 정도라고 볼 수 있으나, 방향키를 사용하여 아래로 내려 보면 아주 많은 정보들이 나올 것이다. Webalizer, AWStats와 같은 로그 분석 프로그램을 커맨드라인 환경으로 옮겨둔 것같은 느낌이다. 

다음과 같은 좋은 기능이 있다. (0.7.1 기준)
    - 일반적인 통계와 트래픽 사용량을 보여준다.
    - 요청에 대해 소요된 시간을 표시한다.
    - IP별 누적 방문자 수 통계
    - 요청 파일 통계
    - 요청에 대한 HTTP 상태코드 코드에 따른 통계
    - 클라이언트 IP에 대한 국가 위치 (Geo IP 이용)
    - 브라우저, OS, 이전페이지(Referrers URLs)에 대한 통계
    - HTML, CVS, JSON 형태 출력

  위 기능은 쉘스크립트의 조합으로 뽑아 낼수 있지만, 위와같이 의미있는 데이터를 빠른시간에 뽑아 내는 것은 GoAccess의 상당한 매력이다.  GoAccess 설치부터 하나 하나 살펴보도록 하자.


1. GoAccess 설치
    GoAccess 1.6.x는 RHEL/CentOS 6에는 기본이 아닌 3rd party 저장소에서 제공한다. 조금 오래된 배포판의 경우 최신버전의 패키지를 구하기 어려우니 컴파일 하여 설치하는 방법을 알아보자.
참고로 SULinux 2014버전에는 "yum install goaccess" 을 통해 최신버전(0.7.1)을 설치 할 수 있다.
        (단, 성능 및 패키지 의존성등의 이유 때문에 GeoIP 기능은 빠져있다.)


   1.1. 소스 다운로드 
       이렇게 좋은 소프트웨어를 사용하려 한다면, 한번쯤 배포하는 사이트에 방문하는 예의라고 생각한다.
     최신 버전의 기능 또한 확인도 하고..

       배포사이트 : http://goaccess.prosoftcorp.com/

 
      위 사이트에서 최신버전의 소스코드를 다운로드 한다.
      2014.03.11기준 0.7.1이 최신이다.


   1.2. 압축해제 및 일반적인 설치
tar xvfp goaccess-0.7.1.tar.gz
  cd goaccess-0.7.1
./configure
make && make install

* 만약 IP를 통해 국가/도시 정보를 얻기위해서는 GeoIP 패키지와 관련 데이터베이스를 설치해 준다음 
          설정과정에서 "./configure --enable-geoip"와 같이 옵션을 넣어 주어야 한다.
       

2. GoAccess 사용
   위와 같이 설치하였다면 터미널 창에서 다음과 같이 입력한다.
      goaccess -f 웹로그파일명


   초기 1회는 다음과 같은 설정화면이 나타난다.  로그포맷에 대한 정보를 방향키로 선택하고 <Space>키를 사용하여 선택한다.   선택이 완료되면 <Enter>키를 눌러 로그 분석 화면으로 넘어간다. 선택한 정보는 "~/.goaccessrc"파일에 저장된다. 




  위 스크린샷과 같이 저장된 로그를 분석하여 보여준다. 그리고 실시간으로 쌓이는 로그에 따라 자동 갱신되며, 수동으로 갱신하기 위해서는 <F5>키를 눌러준다. 메인화면 상단에는 다음 정보들이 보여질 것이다.
  Total Requests : 총 요청수 (로그 라인수와 동일할 것이다.)
  Unique Visitors : 유일 IP 기반으로 접속자를 카운터 한 수치이다.
  Referrers : 이전페이지 (여기서는 로그포맷에 관련 내용이 포함되지 않아 0으로 나온다.)
  Log Size : 로그파일 총 용량
  Failed Requests : 실패한 요청수
  Unique Files : 요청한 유일한 파일 수
  Unique 404 : 유일한 404오류(Not Found) URL수
  Bandwidth : 대역폭(외부로 나간 용량, 여기서는 7.84Giga Bytes 이다.)
  Generation Time : 결과 분석에 소요된 시간(초단위)
  Static Files : 로그를 분석한 유일한 파일수 
  Log File : 분석에 사용된 로그파일 이름
  

메인 화면은 다음과 같은 항목이 있다.
1 - Unique visitors per day - Including spiders                                                            Total: 4/4
2 - Requested files (Pages-URL)                                                                      Total: 300/77840
3 - Requested static files (e.g., png, js, css, etc.)                                                 Total: 300/9050
4 - HTTP 404 Not Found URLs                                                                                Total: 4/4
5 - Hosts                                                                                            Total: 300/11001
6 - Operating Systems                                                                                      Total: 1/1
7 - Browsers                                                                                               Total: 1/1
8 - Referrers URLs                                                                                         Total: 0/0
9 - Referring Sites                                                                                        Total: 0/0
10 - Keyphrases from Google's search engine                                                                Total: 0/0
11 - Geo Location                                                                                        Total: 64/64
12 - HTTP Status Codes                                                                                     Total: 9/9
 위 항목 하나 하나 어떠한 의미를 가지고 있는지 확인해 보자.


1 - Unique visitors per day - Including spiders                                                            Total: 4/4
먼저 메인 화면에서 <Enter>키를 입력하면 다음 그림과 같이 "1번" 항목을 확장한 것을 볼 수 있을 것이다.



  위 그림은 날짜별 
    유일한 IP 기준요청수, 대역폭을 보여주고 있다. 날짜별 방문자를 확인할 수 있는 좋은 데이터가 될 것이다.



2 - Requested files (Pages-URL)                                                                      Total: 300/77840
다음으로 <TAB>키를 누르고 <Enter>키를 누르면 다음 그림과 같이 "2번" 항목이 확장되어 보일 것이다.
<TAB>키를 누를 때 선택된 항목은 최상단 우측에 "Active Module"으로 표기된다. 또는 <Shift> + "2" 를 눌른 다음 <Enter>키를 누른다.


  위 그림은 파일별 요청수, 비율, 대역폭등을 확인할 수 있다. 이렇게 결과가 많을 때에는
 vi 편집기의 커서와 마찬가지로 "j"키를 눌러 아래로 이동하고, "k"키를 눌러 위로 이동할 수 있다.
 또 "g"키를 눌러 맨처음으로, "G"키를 눌러 맨 아래로 이동 또한 가능하다. 
  각 항목별 정렬 또한 가능하다 "s"키를 입력하면 다음그림과 같이 Sort 항목 및 방식을 선택할 수 있다.


위 그림을 보면,
  Hits(요청수) , Data(파일), Bandwidth(대역폭)기준으로 ASC(오름차), DESC(내림차) 정렬을 할 수 있다.



3 - Requested static files (e.g., png, js, css, etc.)                                                 Total: 300/9050
다음으로 <TAB>키를 누르고 <Enter>키를 누르면 다음 그림과 같이 "3번" 항목이 확장되어 보일 것이다.


  위 그림은 정적컨텐츠에 대한 통계를 보여주고있다. 본 결과 또한 "s"키를 사용하여 정렬을 할 수 있다.



4 - HTTP 404 Not Found URLs                                                                                Total: 4/4
다음으로 <TAB>키를 누르고 <Enter>키를 누르면 다음 그림과 같이 "4번" 항목이 확장되어 보일 것이다.


 위 그림은 404 오류에 대한 URL통계를 보여주고 있다.



5 - Hosts                                                                                            Total: 300/11001
다음으로 <TAB>키를 누르고 <Enter>키를 누르면 다음 그림과 같이 "5번" 항목이 확장되어 보일 것이다.


위 그림은 접속한 IP(클라이언트 IP) 기준으로 통계를 보여준다. 각 조회한 IP에 대해 도메인과, 국가 정보를 함께 확인할 수 있다.



6 - Operating Systems                                                                                      Total: 1/1
다음으로 <TAB>키를 누르고 <Enter>키를 누르면 다음 그림과 같이 "6번" 항목이 확장되어 보일 것이다.


위 그림은 접속한 클라이언트의 OS 정보를 기준으로 통계를 보여준 것이다. OS 정보를 확인하기 위해서는 로그를 남기는 포멧이
Combined 이여야 가능하다. 위 그림은 Common 로그 포멧이기 때문에 위와 같은 결과가 나타난다.



7 - Browsers                                                                                               Total: 1/1
다음으로 <TAB>키를 누르고 <Enter>키를 누르면 다음 그림과 같이 "7번" 항목이 확장되어 보일 것이다.


위 그림은 접속한 클라이언트의 Browser 정보를 기준으로 통계를 보여준 것이다. Browsers 정보를 확인하기 위해서는 로그를 남기는 포멧이
Combined 이여야 가능하다. 위 그림은 Common 로그 포멧이기 때문에 위와 같은 결과가 나타난다.


8 - Referrers URLs                                                                                         Total: 0/0
 서버에 접속하기전 URI 정보를 기준으로 통계를 보여준다. Referrer URL은 어떤 페이지를 통해 접속하였는지 쉽게 알수 있으며, 이 정보를 확인하기 위해서는 로그를 남기는 포멧이 Combined 이여야 가능하다. 

9 - Referring Sites                                                                                        Total: 0/0
 서버에 접속하기전 사이트 정보를 기준으로 통계를 보여준다. Referrer Site는 어떤 사이트를 통해 접속하였는지 쉽게 알수 있으며, 이 정보를 확인하기 위해서는 로그를 남기는 포멧이 Combined 이여야 가능하다. 

10 - Keyphrases from Google's search engine                                                                Total: 0/0
 서버에 접속하기전 URI 정보중 구글검색엔진의 검색어를 기준으로 통계를 보여준다. 어떤 검색어로 검색하여 접속하였는지 쉽게 알수 있으며, 이 정보를 확인하기 위해서는 로그를 남기는 포멧이 Combined 이여야 가능하다. 


11 - Geo Location                                                                                        Total: 64/64
 접속한 IP와 GeoIP데이터를 사용하여 의미있는 통계를 보여준다. 국가별로 접속한 수를 보여준다.


 위 그림을 보면 국내에서 가장 많이(88%) 접속한 것으로 보이며, 국내가 아닌 다른 나라에서도 방문을 한 것을 알수 있다.



 
12 - HTTP Status Codes                                                                                     Total: 9/9
HTTP 상태코드 정보를 기준으로 통계를 보여준다. 


 위 그림을 보면, 정상적인 응답(200:OK)이 가장 많다. 다음으로 다른 URL으로 넘기는 Redirect(304)가 다음이다.


웹으로 출력하기
   goaccess -f 로그파일 > 파일이름.html



그밖에 기능들은
    <F1> 키 또는 "h" 키 : 도움말 화면
    <Shift> + 숫자 : 각 모듈 선택, 선택 후 <Enter>키 또는 "o"키를 눌러 펼쳐 볼 수 있다.
    "c" : 스키마를 변경할 수 있다.
    <Ctrl> + "f" : 이전 페이지
    <Ctrl> + "b" : 다음 페이지
    "/" : 검색
    "n" : 검색에서 다음 찾기
    "j" : 아래로 이동
    "k" : 위로 이동
    "g" : 맨처음으로 이동
    "G" : 맨 아래로 이동
    "s" : Sort 항목 및 방식을 선택

goaccess 실행옵션 
    -f : 로그파일 지정
    -a --agent-list : 사용자 에이전트리스팅 / 성능을 위해 사용하지 않는 것이 좋다.
    -c --conf-dialog  : 처음 실행시 나타나는 설정화면 
    -d --with-output-resolver : HTML, JSON 출력시 IP를 도메인으로 보여준다.(가능한 것만)
    -e --exclude-ip=<IP> : 제외할 IP 설정
    -g --std-geoip  : 표준 GeoIP 데이터베이스를 하용하여 메모리 사용량을 줄인다.
    -h --help  : 실행 옵션을 보여주는 도움말 표시
    -H --http-protocol : HTTP 요청 프로토콜이 보이면 이 부분을 포함한다.
    -m --with-mouse  : 메인 데시보드에서 마우스를 지원한다.
    -M --http-method  : HTTP 요청 메소드가 보이면 이 부분을 포함한다.
    -o --output-format=csv|json : csv 또는 json 형태로 출력한다. 
    -p --conf-file=<filename> : 설정파일 위치를 설정한다. (기본은 ~/.goaccessrc 이다.)
    -q --no-query-string  : 요청의 Qeury String을 무시한다.
    -r --no-term-resolver : 결과(터미널)에서 IP에 대해 도메인으로 보여주지 않는다.
    --no-color  : 컬러출력을 하지 않는다.
    --real-os : Real OS 이름을 출력한다.
 
  이상으로 GoAccess에 대한 강좌를 마무리 합니다. GoAccess는 웹서버의 로그를 열악한 환경에서 분석하는 아주 좋은 유틸리티입니다. 강좌의 설명에 있어 오타가 있거나, 내용이 다른 부분이 있으면 언제든지 doly골뱅이superuser.co.kr으로 신고 해 주시기 바랍니다. 2014년 이렇게 좋은 것이 있다는 것을 많은 사람들에게 알려 주고 싶어하는 doly가...

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1794


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
도리
도리(Doly)
(주)수퍼유저 기술이사 (CTO)
리눅스마스터 1급,2급 추천교재(2014년) 집필
리눅스마스터 1급,2급 전문위원(출제)(한국정보통신진흥협회, 2005년~)
SULinux 1.0, 1.5, 2.0, 2014 개발 총괄(sulinux.net, 1998년~)
SSU,LSCP,LSMP,CCMT외 다수 오픈소스 프로젝트 개발 및 운용 (lscp.sf.net외,2009년~)
리눅스 대량 시스템 구축 및 관리(5,000대리눅스 서버 구축 및 관리 경험, 2000년~)

E-Mail : doly골뺑이superuser.co.kr
소개 : 하루 하루 최선을 다합시다!!