아파치 로그분석

2011. 12. 17. 15:34개발/서버

    * 로그 파일은 아래의 정보로 얼마나 웹 관리에 유용한 정보를 추출하느냐가 로그툴의
       좋은지 나쁜지를 평가하는 관건이고, 결과물을 얼마나 보기 쉽고, 사용하기 쉽게 출력
       하느냐 일 것 같습니다.

       통계학적 지식     : 55 %
       프로그래밍지식   : 35 %
       기타(디자인및..)  : 10 %

     * 시장성.. : 제 생각에는 서버 시장의 40 % 정도는 로그 툴을 사용해야 될 것 같습니다.
                      신빙성 있는 자료 현재 없음.( 찾아서 분석하면 +- 오차 10%정도 날 듯 )

     

1) 아파치 로그파일 기록되는 위치

    /var/log/httpd/access_log
    (레드햇의 경우임. 아파치를 컴파일해 설치했다면 /usr/local/apache/logs/access_log 임)

     

2) 로그 기록 내용

     

    211.36.215.78 -  manager [22/Jun/2000:23:09:09 +0900] "GET / HTTP/1.1" 200 5
    ------------- ---  ----   ---------------------------  --- -- ---- -
          1        2    3               4                  5   6   7        8  9

 

    1 : 접속한 클라이언트의 IP 주소, 혹은 도메인 (httpd.conf 에서 HostnameLookups off 로
         설정하면 리버스 도메인 찾기를 않음)

    2 : REMOTE_IDENT (RFC 931 identification (아이덴티피케이션:동일함 확인)
         - 서버가 RFC 931 을 지원하는 경우 이 환경 변수에 클라이언트 시스템에서
         CGI프로그램을 실행시킨 사용자 이름이 저장된다고 합니다. 몰겠습니다.
         아직 한번도 여기 뭔가가 찍힐 것 확인 못해서..

    3 : 사용자이름( .htaccess .htpasswd 에 정의된 사용자 id )

    4 : 클라이언트(사용자 브라우저)의 접속시간정보 ( httpd 접속시간 )
        (구성 : [day/month/year:hour:minute:second zone])

    5 : 클라이언트(사용자 브라우저) 요청종류 ( GET , POST )

    6 : 클라이언트가 요청한 홈페이지 URL 주소 ( 요청한 자료 & 자료위치 )

    7 : 프로토콜 버전

    8 : 상태코드 ( 예. 200 정상처리 )

    9 : 전송데이터 크기 
        상태코드 일부 304 은 - (하이픈) 로 표시
            hits  - 모든 상태 코드 포함 
            files - 상태코드 200번만

    통계 프로그램 Webalizer (웹알리저) 2.00 기준입니다.

    응답 코드별 히트 수

    아래 코드는 상태 코드입니다. 클라이언트가 서버에게 요청했을 때 결과에 대한 상태 코드죠. 여기서 설명한 상태 코드 외에도 더 있지만 차후 추가하겠습니다.

    이 용어는 알아두셔야 될 듯.

    * entity body 
      엔터티 본체는 요청/응답 메시지를 통해서 전달될 수 있는 데이타 자체를 나타내는
      바이트 스트림(byte stream:흐름)이다.

    말은 거창 한데.. 그냥 데이타 보내고 받는 부분입니다. 이 스트림은 엔터티 헤더에서 지정되는 데이타 타입과 인코딩 형식을 갖게 된다.
     

    Code 200 - OK

 

    사용자가 요청한(get , post) 가 성공적으로 수행되었을 때 요청한 처리 결과를 클라이언트에게 전달되는 정보는 사용된 메소드(method:방법)에 따라서 달라진다.. 위에 get 이나 post 가 있습니다. 
     

    Code 206 - Partial(퍄셜) Content(컨텐트)  ( 일부 내용 )

 

    서버가 요청을 처리했지만 클라이언트에게 일부만 전달되었을 때..
     

    Code 301 - Moved Permanently (퍼머렌트리) ( 영구히, 불변하게 이동했다. )

     

    요청된 자원의 URL 값이 완전히 변경되었으므로 앞으로는 새로운 URL 값을 사용하여야 한다. 새로운 URL 값은 location(로케이션,위치) 헤더를 통해서 클라이언트에 전달된다. 또한, HEAD method 를 제외한 모든 경우에 요청  메시지의 entity body를 통해서 새로운 URL의 하이퍼 링크를 포함하는 짧은 메세지를 전달해 주어야 한다.

    웹 브라우저는 post method 를 사용한 요청의 결과로 301 상태코드를 전달받는 경우에는 자동으로 새로운 URL에 접속을 해서는 안된다. 반드시, 사용자의 확인을 거쳐야 한다.
     

    Code 304 - Not Modified ( 수정 모했따 )

 

    conditional(컨디셔널) 잠정적인(조건부의,가정적인) get method가 사용된 경우에 전달된다. Request(리퀘스트 : 요구)를 처리한 결과 If-Modified-since 헤더에  지정된 날짜/시간 이래로 지정된 문서가 변경된 사실이 없는 경우 서버는 이 상태코드로 응답해야 한다. 이때, entity body(실제 본문) 는 전송되지 않는다. (?) 웹브라우저 캐쉬사용 출력 속도 향상
     

    Code 400 - Bad Request  ( 잘못 요청 )

     

    Request(리퀘스트:요청) 메세지의 syntax(신택스:구문)가 잘못되어서 서버가 request 를 처리할 수 없다. 재 접속을 하는 경우에 클라이언트는 반드시 올바른 request메시지를 사용해야 한다.
     

    Code 401 - Unauthorized  (언어더라이즈드 :  권한없는, 허가받지 않은 )

     

    Request가 user authentication을 필요로 한다는 것을 클라이언트에게 알려주기 위해서 사용된다. WWW-Authenticate 헤더를 통해서 요청된 자원에 적용되는 challenge를 전달한다. 401 response(리스판(폰)스:감응,응답) 를 받은 클라이언트는 적절한  Authorization(어더리제이션:위임,권한부여) credentials(크리덴셜:신용 증명 물)를 포함하는 Authorization 헤더와 함께 다시 Request 메시지를 전송한다. Request 메시지에 그와 같은 Authorization credentials이 포함된 경우에  401 상태코드가 전달되면 user authentication(어던트케잇:인증)이 실패한 것을 나타낸다. - 인증 실패
     

    Code 404 - Not Found ( 못 찾았다 )

     

    Request-URL(요청 URL)에 해당하는 자원을 찾을 수 없을 경우에 사용된다 그런 상태가 일시적인 것인지 아니면 언제나 그렇게 되는지를 나타내는 어떤 정보도 전달되지 않는다. 이런 상태를 클라이언트에게 알리고 싶지 않을 경우에는 403 상태코드를 대신 사용해도 된다.

     * 403 코드 :  Forbidden(퍼비든:출입금지구역)

 

■ 일반적 용어

    ● 페이지뷰(page view)

    웹사이트의 특정 웹페이지에 이용자가 접속하여 페이지의 내용이 브라우저에 나타날 때, 그 1 회의 접속을 1 페이지뷰라 정의한다. 페이지뷰는 동일 인이 중복 접속하여도 그 숫자가 계속 증가하게 설정이 가능하다.

    ● 히트(Hit)수

    한명의 사용자가 웹서버의 한 파일에 접속하는 것을 말한다. 히트수는 웹사이트의 인기를 측정하는 단위로 사용되고 있지만 사실 잘못 알고 있는 것이다.

    어떤 사이트의 히트수가 `10’ 이라고 해서 10 명의 이용자가 방문한 것은 아니다. 요컨대, 히트란 서버의 한 파일 접속 수이기 때문에 한 사이트에 이미지가 10개가 포함되어 있다면 히트수는 이미지 10개와 웹페이지 1개를 포함한 11이 되는 것이다. 통계 프로그램 Webalizer(웹알리저) 2.00 기준입니다.

    ● Hits

    Any request made to the server which is logged, is considered a 'hit'. The requests can be for anything... html pages, graphic images, audio files, cgi scripts, etc...  Each valid line in the server log is counted as a hit.  This number represents the total number of requests that were made to the server during the specified report period.

    설명이 좀 이상한 건지 .. 전 이거 해석해도 정확하게 이해가 안갑니다... 돌머리라서 그런지..암튼 모든 서버 요청 기록을 말합니다. 위에 일반적인 hit 수 개념으로 생각하시면 됩니다.

    ● Files

    Some requests made to the server, require that the server then send something back to the requesting client, such as a html page or graphic image.  When this happens, it is considered a 'file' and the files total is incremented.  The relationship between 'hits' and 'files' can be thought of as 'incoming requests' and 'outgoing responses'.

    ※ 이것두  좀 이상해서 소스 뒤적여 봤거든요..이건 위에 말하는 outgoing responses(나가는 응답?) 중에서도..정확하게 나간거.. 그러니까 제가 위에 상태코드 적어 놓은거 중에서도.. 200 번으로 끝나는 수치의 총계입니다..

    ● Pages / pageviews

    This does not include the other stuff that goes into a document, such as graphic images, audio clips, etc...

    페이지 내의 이미지, 오디오 클립, 기타 제외   '.htm', '.html', '.cgi' 페이지 만 인정

    A lot of sites will probably define other extensions,  such as '.phtml', '.php3' and '.pl' as pages as well.  많은 사이트는 더우기 '.phtm의 같은 다른 확장자 , '.php3'과 '.pl' 들도 페이지로 규정할 것입니다. Some other programs (and people :) refer to this as 'Pageviews'. " 페이지 뷰 " 라고도 한답니다.

    ● Sites (사이트)

     

    211.36.215.78 -  manager [22/Jun/2000:23:09:09 +0900] "GET / HTTP/1.1" 200 5
    ------------- ---  ----   ---------------------------  --- -- --- -
          1        2    3               4                  5   6   7        8  9

 

    1 : 접속한 클라이언트의 IP 주소, 혹은 도메인

    1 번의 경우로 사이트 수를 검사할 수밖에 없습니다, 이 수가 각각의 사용자   즉 IP 1개가 1사용자를 의미하지는 않습니다.  (실제 사용자) 공정한 기록을 결정하기에는 어렵습니다. 왜일까요?

    인터넷 사용자 중에는 방화벽이나 IP 공유 기능을 이용해 인터넷 상에서 사용되는 IP 가 아닌 내부 IP (192.168.0.1 ~ 또는 172.0.0.1 ~ etc..) 로 사용하는 경우가 있습니다. 그럴 경우 인터넷 상의 IP 정의는 1개지만. 사용자는 수 백 명 또는 수 천 명이 될 수도 있습니다. 그래서 정확한 기록 결정을 내리기가 힘들다는 거죠.. *^^ 참고 되셨길..

    ● Visits (방문)

    디폴트 타임아웃 값은 30분(변경할 수 있다) 입니다, 그래서 사용자가 오후에 1시00분에(서) 당신의 사이트를 방문한다면, 3시00분에(서) 돌아옵니다, 2 의 방문이 기록되었습니다.

    Note: Visits only occur on PageType requests, that is, for any request whose URL is one of the 'page' types defined with the PageType option.  Due to the limitation of the HTTP protocol, log rotations and other factors, this number should not be taken as absolutely accurate,  rather, it should be considered a pretty close "guess".

    방문은 오직 페이지 타입에 지정된  페이지 형에 대한 요청에 대해 적용한다.
     

    ★ 현재 셋팅 상태

    PageType        htm*
    PageType        cgi
    PageType        moum
    PageType        phtml
    PageType        php3
    PageType        pl

 

    ● KBytes

    로그 기록 내용
     

    211.36.215.78 -  manager [22/Jun/2000:23:09:09 +0900] "GET / HTTP/1.1" 200 5
    ------------- ---  ----   ---------------------------  --- -- --- -
          1        2    3               4                  5   6   7        8  9

     

    전송데이터의 모두 합한 총계입니다. Note: A kilobyte is 1024 bytes, not 1000 :) 킬로 바이트는 1024 바이트입니다. 1000 바이트가 아닙니다.

    ※ 하드 용량의 차이에 관해서 여기서 약간 언급을 해야겠습니다.

    - 하드 용량을 보면 15G 짜리는 사면 제조회사마다 약간의 차이가 있을 거에요.
       그런 의문 가지신 적 없는지?  바로 위와 같은 계산 방식 때문입니다.
       1 Kbyte 를 1024로 하느냐..1000 으로 하느냐..
       전산을 전공한 분이라면 1024가 맞지만 수치상으로 보자면 1000 도 맞는 표현이죠..

    하드는 대부분이 1000 을 기준으로 합니다.!!! 1024 기준이 아님!!

    ● top Entry and Exit pages

    The Top Entry and Exit tables give a rough estimate of what URL's are used to enter your site, and what the last pages viewed are. Because of limitations in the HTTP protocol, log rotations, etc... this number should be considered a good "rough guess" of the actual numbers, however will give a good indication of the overall trend in where users come into, and, your site.

    톱 엔트리와 종료 홈페이지

    첫 번 입력 항목과 마지막 페이지로서 사용자가 접속한 사이트의 URL을 추측할 수 있다. 이 수자가 실제 연결수자의 근사치로 볼 수 있다. 또한 사용자 어디에서 시작해 어느 곳에서 종료하는지를 파악하는 자료이다.