비이로그 V9.0.0 사용자 매뉴얼

7. 아파치 웹 로그 포맷

아파치 웹 서버의 구성 파일(/etc/httpd/conf/httpd.conf)에는 다음과 같이 웹 로그 파일을 어떻게 출력하는지를 설정하는 부분이 있습니다.

<IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined </IfModule>

위의 구성 파일에 의해 서버의 루트 디렉토리(/etc/httpd)에 밑에 logs/access_log 라는 파일을 만들고 웹 로그를 저장합니다.

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    CustomLog "logs/access_log" combined

웹 로그 저장 포맷의 키워드의 의미는 다음과 같습니다.

%h 또는 %a %h는 리모트 호스트 이름을 기록.
(DNS 조회로 이름을 알아올 수 없으면 IP를 기록)

%a는 리모트 IP를 기록
%a 를 사용하기를 권장함

%l 리모트 로그인명
(인식은 하지만 사용하지 않음)
%u 리모트 인증 사용자
(인식은 하지만 사용하지 않음)
%t 리퀘스트 수신 시간
\"%r\" 리퀘스트 정보
%>s 응답 상태 코드
%b 전송한 응답 바이트 수 (헤더 제외)
\"%{Referer}i\" 리퀘스트가 들어온 경로
\"%{User-Agent}i\" 사용자 브라우저 정보

비이로그는 아파치 웹 서버의 combined 로그 포맷을 디폴트로 인식합니다. 추가적으로 다음과 같은 3개의 키워드를 인식합니다.

%T 리퀘스트 처리 시간 (초)
\"%{Content-Type}o\" 클라이언트에게 반환된 컨텐츠의 컨텐츠 유형
[%{X-Forwarded-For}i] 프록시 서버를 통해 전달된 클라이언트 원본 IP
(인식은 하지만 사용하지 않음)

비이로그 서버는 아파치 웹 서버의 로그 파일을 일일 단위로 처리합니다.
일일 단위로 처리하기 위해서는 아파치 웹 서버가 로그 파일을 일일 단위로 구분해서 저장하여야 합니다. rotatelogs 명령어를 사용하여 웹 로그 파일을 일일 단위로 파일을 구분하여 저장할 수 있습니다.

       LogFormat "%a %l %u %t \"%r\" %>s %b %T \"%{Referer}i\" \"%{User-Agent}i\"" belog
       CustomLog "|/usr/sbin/rotatelogs /etc/httpd/logs/access_newtime_log.%Y%m%d 86400 540" belog

위의 아파치 웹 서버의 설정 파일에서 LogFormat 키워드는 아파치 웹 서버의 로그 파일에 저장할 정보의 형식을 지정하고, CustomLog 키워드는 로그 파일을 저장할 파일명을 지정합니다.
여기서 파일명의 맨 앞 글자에 파이프 기호 ‘|’를 지정하면, 파일명이 아니라 첫 글자 파이프를 제외한 부분을 명령어로 간주하여, 해당 명령어를 실행하고, 그 명령어의 표준 입력으로 웹 로그를 출력합니다.

/usr/sbin/rotatelogs 명령어는 첫 번째 인수로 파일명을 지정하고, 두 번째 인수는 로그 파일을 스위칭할 시간(초 단위)를 지정하고, 3번째 인수는 타임 옵셋 시간(분 단위)입니다. 한국 시간은 GMT+9 입니다. 9시간 (540분) 늦습니다. 한국의 로컬 시간을 사용하려면, 타임 옵셋 시간을 540으로 지정하면 됩니다.
로그 파일을 스위칭 시간이 86400초입니다. 86400초는 24시간이고 하루입니다.

하루에 하나씩 만들어지고, 파일명에는 날짜를 표시하는 세 개의 키워드가 %Y %m %d가 있어야 합니다.

웹 서버의 구성에서 위의 LogFormat의 형식 내용을 그대로 비이로그 서버의 로그 포맷 구성 파일(/opt/BELOG/conf/logformat.conf)에 LogFormat의 형식 값은 그대로 넣어야 합니다.

LogFormat의 내용에는 하나의 공백으로 분리된 필드 값이 지정되어야 합니다. TAB 문자가 있으면 안되고, 공백이 여러 개 연속되어도 안됩니다.

기존의 LogFormat을 무시하고 새로 설정해도 되면, 다음과 같은 LogFormat을 추천합니다.

"%a %l %u %t \"%r\" %>s %b %T \"%{Content-Type}o\" \"%{Referer}i\" \"%{User-Agent}i\""
\"%{Content-Type}o\" 이 형식이 들어 있으면, 비이로그(BeLOG) 서버가 HTML 페이지를 구분할 때, 정확히 구분할 수 있습니다. 이 형식이 들어 있지 않으면, 리퀘스트의 경로에 있는 확장자 이름으로 HTML 페이지를 구분합니다.

다음과 같이 LogFormat에 belog를 추가하고 CustomLog를 rotatelogs 명령어로 대치하면 다음과 같습니다.

<IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %b %T \"%{Content-Type}o\" \"%{Referer}i\" \"%{User-Agent}i\"" belog LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> #CustomLog "logs/access_log" combined CustomLog "|/usr/sbin/rotatelogs /etc/httpd/logs/access_daily_log.%Y%m%d 86400 540" belog </IfModule>

새로 설정한 LogFormat의 내용을 비이로그 서버에 로그 포맷 구성 파일 (/opt/BELOG/conf/logformat.conf)에 등록해야 합니다.

"%a %l %u %t \"%r\" %>s %b %T \"%{Content-Type}o\" \"%{Referer}i\" \"%{User-Agent}i\""

또한, 고객의 웹 서버(비이로그 클라이언트)의 비이로그 클라이언트 구성 파일(/opt/BELOG/etc/BELOG-cli.conf)의BASEDIR, BELOG_LOG_FILE_NAME 파라미터에 다음과 같이 웹 로그 파일 정보를 지정하여야 합니다.

BASEDIR=/etc/httpd/logs BELOG_LOG_FILE_NAME=access_daily_log.%Y%m%d

/opt/BELOG/bin/BELOG-field 명령어는 지정한 입력 파일에서 첫번째 라인을 읽어서 로그 포맷의 형식(/opt/BELOG/conf/logformat.conf)에 맞게 다음과 같이 보여 줍니다.

# /opt/BELOG/bin/BELOG-field /etc/httpd/logs/access_daily_log.20240101 Field 1 (%a) : 192.168.0.2 Field 2 (%l) : - Field 3 (%u) : - Field 4 (%t) : 01/Jan/2024:00:01:00 +0900 Field 5 (%r) : GET /brun/BEp HTTP/1.1 Field 6 (%>s) : 200 Field 7 (%b) : 33381 Field 8 (%T) : 0 Field 9 (%{Content-Type}o) : text/html Field 10 (%{Referer}i) : http://192.168.0.117/brun/BEp Field 11 (%{User-Agent}i) : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36

위 명령어의 결과에서 웹 로그가 잘 인식되는지 확인할 수 있습니다.

다음의 그림은 아파치 웹 서버의 구성 파일(/etc/httpd/conf/httpd.conf)의 웹 로그 파일 설정과 비이로그의 구성 파일과의 관계입니다.

아파치 웹 서버의 구성 파일을 변경하였을 경우에 다음과 같이 systemctl 명령어를 사용하여 변경 사항을 적용해야 합니다.

# systemctl restart httpd