21장 로깅과 사용 추적
로깅을 알아보고, 어떤 HTTP 트랜잭션 정보를 기록하고, 로그 포맷에는 어떤것들이 있는지 알아본다.
1. 로그란 무엇인가?
- 대체적으로 로깅을 하는 이유?
- 서버나 프락시의 문제를 찾기 위해서
- 웹 사이트 접근 통계를 내기위해서
- 별 연관성이 없고 다시 볼 일도 없는 데이터만 로깅한다.
- 보통은 트랜잭션의 기본적인 항목들만 로깅한다.
- HTTP 메서드
- 클라이언트와 서버의 HTTP 버전
- 요청받은 리소스의 URL
- 응답의 HTTP 상태 코드
- 요청과 응답 메시지의 크기
- 트랜잭션이 일어난 시간
- Referer와 User-Agent 헤더 값
2. 로그 포맷
- 상용 혹은 오픈 소스 HTTP 애플리케이션은 대부분, 표준 로그 포맷을 한 개 이상 지원한다.
- 애플리케이션이 더 많은 표준 포맷을 지원하고 관리자가 사용할 수록 얻을 수 있는 이점이 많다.
2.1 일반 로그 포맷(Common Log Format)
- 가장 일반적인 포맷이며, 많은 서버들이 기본으로 사용한다.
필드 | 설명 |
---|---|
remotehost | 요청한 컴퓨터의 호스트 명 혹은 IP주소 |
username | ident 검색을 수행했다면, 인증된 요청자의 사용자 이름 |
auth-username | 인증을 수행했다면, 인증된 요청자의 이름 |
teimstamp | 요청 날짜와 시간 |
request-line | HTTP 요청의 행을 그대로 기술 |
response-code | 응답으로 보내는 HTTP 상태 코드 |
response-size | 응답 엔터티의 Content-Length, 아무런 엔터티를 반환하지 않으면 값이 0이 된다. |
일반 로그 포맷 엔트리의 몇가지 예
209.1.32.44 - - [03/Feb/2020:14:15:00 -0400] "GET / HTTP/1.0" 200 1024
bebiangel.github.io - dg [03/Feb/2020:14:15:00 -0400] "GET / HTTP/1.0" 200 477
bebiangel.github.io - dg [03/Feb/2020:14:15:00 -0400] "GET /foo HTTP/1.0" 404 0
필드 | 엔트리1 | 엔트리2 | 엔트리3 |
---|---|---|---|
remotehost | 209.1.32.44 | bebiangel.github.io | bebiangel.github.io |
username | 없음 | 없음 | 없음 |
auth-username | 없음 | dg | dg |
teimstamp | 03/Feb/2020:14:15:00 -0400 | 03/Feb/2020:14:15:00 -0400 | 03/Feb/2020:14:15:00 -0400 |
request-line | GET / HTTP/1.0 | GET / HTTP/1.0 | GET /foo HTTP/1.0 |
response-code | 200 | 200 | 404 |
response-size | 1024 | 477 | 0 |
3. 적중 계량하기
- 캐시는 수많은 HTTP요청을 처리하므로, 요청이 원 서버 까지 오지 않더라도 정상적으로 처리될 수 있어서, 클라이언트가 콘텐츠에 접근했다는 기록이 남지 않아 로그 파일에 누락이 발생하게 된다.
- 캐시를 파기 시킨다면, 문제 없이 로깅을 하지만, 요청에 대한 응답속도가 느려지고 원서버와 네트워크의 부하가 가중되는 문제를 야기한다.
- 적중 계량 규약은 HTTP의 확장으로, 캐시가 정기적으로 캐시 접근 통계를 원 서버에 보고하도록 한다.
- 완벽하진 않지만, 서버가 원하는 통계 정보를 받아볼 수 있는 방법을 제공한다.