거의 모든 서버와 프락시는 처리했던 HTTP 트랜잭션을 요약해서 기록해 놓는다.
#1. 로그란 무엇인가?
대게 로깅을 하는 이유는 두 가지다. 서버나 프락시의 문제를 찾거나, 웹 사이트 접근 통계를 내려고 로깅을 한다.
보통 트랜잭션의 기본적인 항목들만 로깅한다.
- HTTP 메서드
- 클라이언트와 서버의 HTTP 버전
- 요청받은 리소스의 URL
- 응답의 HTTP 상태 코드
- 요청과 응답 메시지의 크기(모든 엔터티 본문을 포함)
- 트랜잭션이 일어난 시간
- Referer와 User-Agent 헤더 값
#2. 로그 포맷
상용 혹은 오픈 소스 HTTP 애플리케이션은 대부분 표준 로그 포맷을 한 개 이상 지원한다. 그리고 그 애플리케이션 대부분이 로그 포맷을 설정하고 자체 맞춤 포맷을 만들 수 있는 설정 기능을 제공한다.
일반 로그 포맷(Common Log Format)
많은 서버가 이 로그 포맷을 기본으로 사용한다. 대부분의 상용 혹은 오픈 소스 서버는 이 포맷을 사용하게 설정할 수 있다.
필드 | 설명 |
remotehost | 요청한 컴퓨터의 호스트 명 혹은 IP 주소 |
username | ident 검색을 수행, 인증된 요청자의 사용자 이름이 있다. |
auth-username | 인증을 수행했다면, 인증된 요청자의 이름이 있다. |
timestamp | 요청 날짜와 시간 |
request-line | HTTP 요청의 행을 그대로 기술한다. |
response-code | 응답으로 보내는 HTTP 상태코드 |
response-size | 응답 엔터티의 Content-Length |
혼합 로그 포맷(Combined Log Format)
이 포맷은 아파치 같은 서버들이 지원한다. 혼합 로그 포맷은 일반 로그 포맷과 매우 유사하다. 추가된 필드 두 개를 제외하면 똑같다.
필드 | 설명 |
Referer | Referer HTTP 헤더의 값 |
User-Agent | User-Agent Referer HTTP 헤더의 값 |
넷스케이프 확장 로그 포맷
넷스케이프의 포맷은 NCSA 일반 로그 포맷에서 시작했지만 프락시나 웹 캐시 같은 HTTP 애플리케이션과 연관이 있는 여러 환경을 지원하려고 포맷을 확장했다.
필드 | 설명 |
proxy-response-code | 트랜잭션이 프락시를 거칠 경우 서버에서 프락시로의 HTTP 응답코드 |
proxy-response-size | 트랜잭션이 프락시를 거칠 경우 서버가 프락시에 전달하는 응 답 엔터티의 Content-Length |
client-request-size | 클라이언트가 프락시로 보내는 요청의 본문이나 엔터티의 Content-Length |
proxy-request-size | 트랜잭션이 프락시를 거칠 경우 프락시가 서버로 보내는 요청의 본문이나 엔터티의 Content-Length |
client-request-hdr-size | 클라이언트 요청 헤더의 바이트 길이 |
proxy-response-hdr-size | 트랜잭션이 프락시를 거칠 경우 프락시가 요청자에게 보내는 응답 헤더의 바이트 길이 |
proxy-request-hdr-size | 트랜잭션이 프락시를 거칠 경우, 프락시가 서버로 전송하는 요청 헤더의 바이트 길이 |
server-response-hdr-size | 서버 응답 헤더의 바이트 길이 |
proxy-timestamp | 트랜잭션이 프락시를 거칠 경우 요청과 응답이 프락시를 통해 오가는 총 시간(초 단위) |
넷스케이프 확장 2 로그 포맷
확장 로그 포맷에서 HTTP 프락시와 웹 캐시 애플리케이션과 관련한 더 많은 정보를 포함한다.
필드 | 설명 |
route | 프락시가 클라이언트에 요청을 만드는 데 사용하는 경로 |
client-finish-status-code | 클라이언트의 종료 상태 코드로 프락시로 보낸 요청이 성공적으로 완료되었는지 혹은 인터럽트에 걸렸는지 기술한다. |
proxy-finish-status-code | 프락시의 종료 상태 코드로 프락시가 서버로 보낸 요청이 성공적으로 완료되었는지 혹은 인터럽트에 걸렸는지 기술한다. |
cache-result-code | 캐시 결과 코드로 캐시가 요청에 어떻게 응답했는지 기술한다. |
스퀴드(Squid) 프락시 로그 포맷
스퀴드 프락시 캐시는 웹 분야에서 권위 있는 프로젝트다. 스퀴드는 수년간 오픈 소스 커뮤니티를 통해 확장 및 개선되어 온 프로젝트다. 그리고 스퀴드 애플리케이션을 관리하는 데 도움이 되는 수많은 도구들이 개발되었다. 많은 차세대 프락시 캐시들이 이러한 도구를 활용하려고 자체 로그 포맷으로 스퀴드 포맷을 적용했다.
필드 | 설명 |
timestamp | 요청이 도착한 시간을 GMT 1970년 1월 1일을 기준으로 지난 시간을 초 단위로 기술 |
time-elapsed | 요청과 응답이 프락시를 통해 오고간 총 시간을 밀리초로 기술 |
host-ip | 클라이언트의 호스트 장비 IP 주소 |
result-code/status | result 필드에는 이 요청에 프락시가 어떤 일을 했는지 스퀴드 방식으로 기술, code 필드는 프락시가 클라이언트에 보낸 HTTP 응답 코드 |
size | 프락시가 클라이언트에게 보낸 HTTP 응답 헤더와 본문을 포함한 응답의 길이가 바이트 단위로 기술 |
method | 클라이언트 요청의 HTTP 메서드 |
url | 클라이언트 요청의 URL |
rfc931-ident | 클라이언트에 인증된 사용자 이름 |
hierarchy/from | hierarchy 필드는 프락시가 클라이언트로 요청을 보내면서 거친 경로, from 필드는 프락시가 요청을 만들게 한 서버의 이름을 기술 |
content-type | 프락시 응답 엔터티의 Content-Type |
#3. 적중 계량하기(Hit Metering)
- 캐시는 수많은 HTTP 요청을 처리하므로 요청이 원 서버까지 오지 않더라도 정상적으로 처리될 수 있어서 클라이언트가 콘텐츠에 접근했다는 기록을 남기지 않아 결국엔 로그 파일에 누락을 발생시킨다.
- 로그 데이터가 유실되기 때문에 콘텐츠 제공자는 어쩔 수 없이 중요한 페이지의 캐시를 파기할 수도 있다.
- 캐시를 파기시켜 로깅을 문제없이 할 수 있지만 요청에 대한 응답 속도는 느려지고 원 서버와 네트워크의 부하가 가중된다.
적중 계량(Hit Metering) 규약은 HTTP의 확장으로 문제의 해결책으로 제시되었다. 적중 계량 규약에서는 캐시가 정기적으로 캐시 접근 통계를 원 서버에 보고하도록 한다. (RFC 2227)
참고 자료
- HTTP완벽가이드 , 인사이트
'HTTP' 카테고리의 다른 글
[HTTP] 리다이렉션과 부하 균형 (0) | 2020.05.07 |
---|---|
[HTTP] 웹 호스팅 (0) | 2020.05.07 |
[HTTP] 내용 협상(Content-negotiation)과 트랜스코딩 (0) | 2020.05.06 |
[HTTP] 국제화 : 문자집합 인코딩 (0) | 2020.05.06 |
[HTTP] 엔터티와 인코딩 (0) | 2020.05.05 |