1. 개요
웹서버는 클라이언트에서 HTTP 서비스 호출 시에 IP 정보, 호출시간, 응답코드, 응답 바이트 수 등 정보 등을 포함한 접근 로그 보통, access log를 기록한다.
access 로그를 기록하는데 있어서 3개의 지시자 - TransferLog, CustomLog, LogFormat - 를 이해해야 한다.
가장 자주 사용되고 있는 로그 관련 설정은 아래 예시와 같다.
로그 포맷은 대부분 웹서버에서 표준으로 지원하는 CLF(Common Log Format) 형식으로 기록한다.
2. 지시자 - CustomLog, LogFormat, TransferLog
예시를 보면서 이해하는 것이 가장 빠르다.
예시#1) CustomLog 사용
...... LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access.log common ...... |
위의 예시에서 보듯이 2개의 지시자를 활용해 로그 파일(logs/access.log)과 로그 포맷(common 별칭)을 지정하는 것을 볼 수 있다.
참고로, 위의 예시는 아래와 같이도 지정할 수 있다.
CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %b"
예시#2) TransferLog 사용
...... LogFormat "%h %l %u %t \"%r\" %>s %b" common TransferLog logs/access.log ...... |
CustomLog는 로그 포맷 별칭(위에서 common)을 사용하지만, TransferLog 지시자는 맨 마지막에 선언된 LogFormat 기준의 로그포맷으로 로그를 쌓는다.
3. 로그 순환 (Log Rotation)
접근 로그에 쌓이는 정보량은 엄청나다. 그러므로, 차후에 로그 분석 등을 위해서 특정 시점에서 로그 파일을 분할하여 저장하는 것이 좋다. 이를 위한 방법으로 "|" 파이프라인과 "rotatelogs" 프로그램을 활용한다.
예시는 아래와 같다.
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common |
odl_rotatelogs [-u:offset] logfile {size-|time-based-rotation-options} |
[참고] 로그 포맷 설명
형식 문자열 | 설명 | ||||||
---|---|---|---|---|---|---|---|
%% | 퍼센트 기호 | ||||||
%...a | 원격 IP-주소 | ||||||
%...A | (서버) IP-주소 | ||||||
%...B | HTTP 헤더를 제외한 전송 바이트수. | ||||||
%...b | HTTP 헤더를 제외한 전송 바이트수. CLF 형식과 같이 전송한 내용이 없는 경우 0 대신 '- '가 나온다. | ||||||
%...{Foobar}C | 서버가 수신한 요청에서 Foobar 쿠키의 내용. | ||||||
%...D | 요청을 처리하는데 걸린 시간 (마이크로초 단위). | ||||||
%...{FOOBAR}e | 환경변수 FOOBAR의 내용 | ||||||
%...f | 파일명 | ||||||
%...h | 원격 호스트 | ||||||
%...H | 요청 프로토콜 | ||||||
%...{Foobar}i | 서버가 수신한 요청에서 Foobar: 헤더의 내용. | ||||||
%...l | (있다면 identd가 제공한) 원격 로그인명. mod_ident 가 있고 IdentityCheck 가 On 이 아니면 빼기기호를 기록한다. | ||||||
%...m | 요청 메써드 | ||||||
%...{Foobar}n | 다른 모듈이 기록한 Foobar 노트(note) 내용. | ||||||
%...{Foobar}o | 응답의 Foobar: 헤더 내용. | ||||||
%...p | 요청을 서비스하는 서버의 정규 포트 | ||||||
%...P | 요청을 서비스하는 자식의 프로세스 ID. | ||||||
%...{format}P | 요청을 서비스하는 자식의 프로세스 ID 혹은 쓰레드 ID. format에는 pid 와 tid 가 가능하다. | ||||||
%...q | 질의문자열 (질의문자열이 있다면 앞에 ? 를 붙이고, 없다면 빈 문자열) | ||||||
%...r | 요청의 첫번째 줄 | ||||||
%...s | 상태(status). 내부 리다이렉션된 요청의 경우 *원래* 요청의 상태이다. 최종 요청의 상태는 %...>s . | ||||||
%...t | common log format 시간 형식(표준 영어 형식)의 시간 | ||||||
%...{format}t | strftime(3) 형식 format의 시간. (지역시간일 수 있음) | ||||||
%...T | 요청을 처리하는데 걸린 시간 (초 단위). | ||||||
%...u | 원격 사용자 (auth가 제공하며, 상태(%s )가 401인 경우 이상한 값을 나올 수 있음) | ||||||
%...U | 질의문자열을 제외한 요청 URL 경로. | ||||||
%...v | 요청을 서비스한 서버의 정규 ServerName . | ||||||
%...V | UseCanonicalName 설정에 따른 서버명. | ||||||
%...X | 응답을 마쳤을때 연결 상태.
(아파치 1.3 후반 버전에서 이 지시어는 | ||||||
%...I | 요청과 헤더를 포함한 수신 바이트수로 0일 수 없다. 이를 사용하려면 mod_logio 가 필요하다. | ||||||
%...O | 헤더를 포함한 송신 바이트수로 0일 수 없다. 이를 사용하려면 mod_logio 가 필요하다. |
[참조] https://httpd.apache.org/docs/2.4/ko/logs.html
'웹서버 > OHS' 카테고리의 다른 글
[개요] OHS 12c 디렉터리 구조 (0) | 2018.05.31 |
---|---|
[Tips] OHS 12c MPM(Multi-Processing Modules) 방식 (0) | 2018.05.03 |
[정보] OHS 에러 로그 (0) | 2018.04.18 |
[명령어] opmnctl 설명 (0) | 2017.09.19 |
[명령어] 인스턴스와 컴포넌트 생성/삭제 방법 (0) | 2017.06.04 |