SW/리눅스

Linux : Apache Error, Logs 구성 방법, 예제, 명령어

얇은생각 2022. 6. 6. 07:30
반응형

Apache는 오픈 소스 교차 플랫폼 HTTP 서버입니다. 다양한 모듈로 확장할 수 있는 강력한 기능이 많습니다. Apache 웹 서버를 관리할 때 가장 자주 수행하는 작업 중 하나는 로그 파일을 확인하는 것입니다.

로그를 구성하고 읽는 방법을 알면 자세한 디버깅 정보를 제공하는 서버 또는 응용 프로그램 문제를 해결할 때 매우 유용합니다.

Apache는 이벤트 레코드를 액세스 로그와 오류 로그의 두 가지 로그 유형에 기록합니다. 액세스 로그에는 클라이언트 요청에 대한 정보와 서버 및 응용 프로그램 문제에 대한 오류 로그 정보가 포함됩니다.

이 자료에서는 Apache 액세스 및 오류 로그를 구성하고 읽는 방법에 대해 설명합니다.

 

 

Linux : Apache Error, Logs 구성 방법, 예제, 명령어

 

 

액세스 로그를 구성

Apache 웹 서버는 처리된 모든 요청에 대해 액세스 로그에 새 이벤트를 생성합니다. 각 이벤트 레코드에는 타임스탬프가 포함되며 클라이언트 및 요청된 리소스에 대한 다양한 정보가 포함됩니다. 액세스 로그는 방문자의 위치, 방문한 페이지, 페이지에서 보내는 시간 등을 보여줍니다.

CustomLog 지시어는 로그 파일의 위치와 기록된 메시지의 형식을 정의합니다.

CustomLog 지시문의 가장 기본적인 구문은 다음과 같습니다.

CustomLog log_file format [condition];

 

 

log_file은 ServerRoot에 상대적이거나 로그 파일의 전체 경로일 수 있습니다. 로그 메시지는 파이프 기호 |을 사용하여 다른 프로그램으로 파이프할 수도 있습니다.

두 번째 인수인 형식은 로그 메시지의 형식을 지정합니다. 명시적 형식 정의 또는 LogFormat 지시어로 정의된 닉네임일 수 있습니다.

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access.log combined

 

 

CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""

 

 

동일한 코드가 여러 번 반복되지 않도록 하려면 LogFormat 지시문을 정의하고 CustomLog 지시문의 닉네임으로 사용하는 것이 좋습니다.

모든 형식 문자열 및 한정자의 전체 목록을 보려면 "mod_log_config" 모듈 설명서를 참조하십시오.

세 번째 인수 [조건]은 선택 사항이며 특정 조건이 충족될 때만 로그 메시지를 작성할 수 있습니다. 보통 이것은 환경 변수를 사용하여 수행됩니다. 조건은 ! 기호를 사용하여 부정할 수 있습니다.

예를 들어 로그 파일에 쓸 css 파일에 대한 요청을 제외하려면 다음을 사용합니다.

SetEnvIf Request_URI \.css$ css-file
CustomLog logs/access.log custom env=!css-file

 

 

로깅 형식을 변경하려면 새 LogFormat 지시문을 정의하거나 기본 형식을 재정의할 수 있습니다. 일반적으로 새 형식을 정의하는 것이 좋습니다.

액세스 로그는 매우 유용한 정보를 제공하지만 디스크 공간이 필요하고 서버 성능에 영향을 미칠 수 있습니다. 서버의 리소스가 부족하고 사용 중인 웹 사이트가 있는 경우 액세스 로그를 사용하지 않도록 설정할 수 있습니다.

이렇게 하려면 기본 서버 구성 및 가상 서버 섹션에서 CustomLog 지시문을 삭제하거나 삭제하기만 하면 됩니다.

하나의 가상 호스트에 대해서만 액세스 로그를 해제하려면 CustomLog 지시문의 첫 번째 인수를 /dev/null로 설정합니다.

CustomLog /dev/null combined

 

 

 

오류 로그를 구성

Apache는 응용 프로그램 및 일반 서버 오류에 대한 메시지를 오류 로그 파일에 기록합니다. 웹 응용 프로그램에 오류가 발생하는 경우 오류 로그는 문제 해결을 위해 가장 먼저 시작됩니다.

ErrorLog 지시문은 오류 로그의 이름 위치를 정의합니다. 이 형식은 다음과 같습니다.

ErrorLog log_file

 

 

log_file의 경로가 절대적이지 않은 경우, log_file은 ServerRoot에 상대적인 경로로 설정됩니다. 에러 메시지는 파이프 기호 |를 사용하여 다른 프로그램으로 파이핑할 수도 있습니다.

LogLevel 매개 변수는 로깅 수준을 설정합니다. 다음은 심각도(낮음부터 높음까지)별로 나열된 수준입니다.

 

trace1 - trace8 - 메시지를 추적합니다.

debug - 메시지를 디버깅합니다.

info - 정보 메시지입니다.

notice - 통지입니다.

warn - 경고입니다.

error - 요청을 처리하는 동안 오류가 발생했습니다.

crit - 심각한 문제입니다. 즉각적인 작업이 필요합니다.

alert - 경보입니다. 즉시 조치를 취해야 합니다.

emerg - 비상 상황입니다. 시스템이 사용할 수 없는 상태입니다.

 

각 로그 수준에는 상위 수준이 포함됩니다. 예를 들어 로그 수준을 경고로 설정하면 Apache는 오류, 심각, 알림 및 긴급 메시지도 기록합니다.

LogLevel 매개 변수를 지정하지 않으면 기본적으로 경고가 표시됩니다. 수준을 최소한 심각으로 설정하는 것이 좋습니다.

ErrorLogFormat 지시문은 오류 로그의 형식을 지정합니다. 대부분의 리눅스 배포에서 Apache 서버는 대부분의 경우 충분한 기본 형식을 사용합니다.

 

 

 

가상 호스트 및 글로벌 로깅

로깅 동작과 파일 위치는 전역 또는 가상 호스트별로 설정할 수 있습니다.

그런 다음 CustomLog 또는 ErrorLog 지시문이 메인 서버 컨텍스트에서 설정되면 서버는 모든 로그 메시지를 동일한 액세스 및 오류 로그 파일에 기록합니다.

그렇지 않으면 지시문이 <VirtualHost> 블록 안에 있으면 해당 가상 호스트에 대한 로그 메시지만 지정된 파일에 기록됩니다.

<VirtualHost> 블록에 설정된 로그 지시어는 서버 컨텍스트에 설정된 지시어를 재정의합니다.

CustomLog 또는 ErrorLog 지시문이 없는 가상 호스트는 해당 로그 메시지를 글로벌 서버 로그에 기록합니다.

읽기 쉽도록 각 가상 호스트에 대해 별도의 액세스 및 오류 로그 파일을 설정하는 것이 좋습니다. 다음은 예입니다.

<VirtualHost *:80>
     ServerName example.com
     ServerAlias www.example.com
     ServerAdmin webmaster@example.com
     DocumentRoot /var/www/example.com/public
     LogLevel warn
     ErrorLog /var/www/example.com/logs/error.log
     CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>

 

 

구성 파일을 수정할 때마다 Apache 서비스를 재시작해야 변경 사항이 적용됩니다.

 

 

 

로그 파일의 위치

Ubuntu와 같은 Debian 기반 배포에서는 기본적으로 /var/log/apache2 디렉토리에 액세스 및 오류 로그가 있습니다. 로그 파일은 /var/log/httpd 디렉토리에 저장됩니다.

 

 

 

Apache 로그 파일을 읽고 이해

로그 파일은 cat , less , grep , cut , awk 등과 같은 표준 명령을 사용하여 열고 구문 분석할 수 있습니다.

다음은 Debian' combine 로그 형식을 사용하는 액세스 로그 파일의 예제 레코드입니다.

192.168.33.1 - - [08/Jan/2020:21:39:03 +0000] "GET / HTTP/1.1" 200 6169 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"

 

 

레코드의 각 분야가 의미하는 바를 세분화해 보겠습니다.

 

%h - 192.168.33.1 - 요청을 수행하는 클라이언트의 호스트 이름 또는 IP 주소입니다.

%l - - - 원격 로그 이름입니다. 사용자 이름이 설정되지 않은 경우 이 필드에는 -가 표시됩니다.

%u - - 요청이 인증되면 원격 사용자 이름이 표시됩니다.

%t - [08/Jan/2020:21:39:03 +0000] - 로컬 서버 시간입니다.

\"%r\" - "GET / HTTP/1.1" - 요청의 첫 번째 줄입니다. 요청 유형, 경로 및 프로토콜입니다.

%>s - 200 - 최종 서버 응답 코드입니다. > 기호를 사용하지 않고 요청이 내부적으로 리디렉션된 경우 원래 요청의 상태가 표시됩니다.

%O - 396 - 서버 응답 크기(바이트)입니다.

\"%{Refer}i\" - "-" - 참조의 URL입니다.

\"%{User-Agent}i\" - Mozilla/5.0 ... - 클라이언트의 사용자 에이전트(웹 브라우저)입니다.

 

tail 명령을 사용하여 로그 파일을 실시간으로 확인합니다.

tail -f access.log

 

 

로그 파일은 서버 문제와 방문자가 웹 사이트와 상호 작용하는 방법에 대한 유용한 정보를 제공합니다.

Apache는 사용자의 필요에 따라 액세스 및 오류 로그를 사용자 정의할 수 있는 매우 구성 가능한 로깅 시스템을 갖추고 있습니다.

반응형